Vous recherchez une méthode abrégée ou meilleure pour tester une date nulle (colonne datetime MySQL) autre que:
if ($row['this_date'] == '0000-00-00 00:00:00') echo 'No date set.';
Existe-t-il une fonction PHP qui le teste? Merci.
Je pense que vous n'avez pas besoin de sténographie.
C'est en quelque sorte une micro-optimisation.
Vous avez déjà passé plus de temps à poser cette question que vous ne pourriez économiser une telle sténographie dans une année de codage moyen. Il suffit d'écrire et passer à autre chose.
N'avez-vous pas des problèmes plus importants à résoudre?
De plus, avec un tel raccourci, vous obscurcirez votre propre code.
Votre relevé actuel est parfaitement clair, lit "if date is empty"
mais tous les extraits proposés ne sont pas si clairs. Venant à ce code des mois plus tard, vous vous demanderez si un tel monstre de code a une signification particulière.
Ce que tu voulais vraiment, c’est lisibilité . Mais vous l'avez déjà. Bien que tous les raccourcis proposés ne le soient pas.
Qu'en est-il de:
if(strtotime($row['this_date']) == 0) echo 'No date set.';
Bien que vous devriez probablement utiliser NULL dans votre base de données, un simple hack serait:
if(!(int)$row['this_date'])echo'No Date Set.';
Quel genre de meilleur moyen espérez-vous trouver? c'est rapide comme ça.
P.S. C'est un bidouillage parce que je suppose que vous aurez une année. Cela signifie que cela ne fonctionnera pas pour la chaîne 0000-00-00 00:00:01
Étant fan d'expressions régulières, je vais en ajouter un autre:
if (!preg_match('/[1-9]/', $row['this_date'])) echo 'No date set.';
if (strtotime($row['this_date'])) echo 'No date set.';
Vous pouvez utiliser le code suivant
$date = '0000-00-00 00:00:00';
if(str_replace(array("-", " ", ":"), "", $date)*1>0){
echo "DATE";
} else {
echo "NODATE";
}
C'est une fonction que j'utilise exactement pour la même chose:
/**
* Like empty(), but also returns true for empty MySQL DATE ('0000-00-00') and DATETIME ('0000-00-00 00:00:00')
*
* @param mixed $var Variable to check
* @return bool
*/
function empty_date($var)
{
if (empty($var) or $var === '0000-00-00' or $var === '0000-00-00 00:00:00')
return true;
else
return false;
}
Cette solution fonctionne pour moi.
La valeur '0000-00-00'
est stockée dans ma table de base de données.
function checkValidDate($date){
$timestamp = strtotime($date);
return (!empty($timestamp) && $date!='0000-00-00') ? date('d-M-Y',$timestamp) : null;
}
J'utilise:
if ($timedate->format('U') == -62169962400){
// 0000-00-00
}
format('U')
retournera Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)
Il est possible que le numéro doive être ajusté pour le fuseau horaire
Utilisez checkdate
<?php
var_dump(checkdate(12, 31, 2000));
var_dump(checkdate(2, 29, 2001));
?>
L'exemple ci-dessus affichera:
bool(true)
bool(false)