Voici comment j'ai vérifié les dates précédemment. J'avais aussi mes propres fonctions pour convertir les formats de date, cependant, j'utilise maintenant la classe DateTime de PHP, donc je n'en ai plus besoin. Comment vérifier au mieux une date valide en utilisant DataTime? Faites-moi également savoir si vous pensez que je devrais utiliser DataTime en premier lieu. Merci
PS. J'utilise un style orienté objet et non un style procédural.
static public function verifyDate($date)
{
//Given m/d/Y and returns date if valid, else NULL.
$d=explode('/',$date);
return ((isset($d[0])&&isset($d[1])&&isset($d[2]))?(checkdate($d[0],$d[1],$d[2])?$date:NULL):NULL);
}
Vous pouvez essayer celui-ci:
static public function verifyDate($date)
{
return (DateTime::createFromFormat('m/d/Y', $date) !== false);
}
Cette sortie vrai/faux. Vous pouvez retourner directement l'objet DateTime
:
static public function verifyDate($date)
{
return DateTime::createFromFormat('m/d/Y', $date);
}
Ensuite, vous récupérez un objet DateTime
ou false en cas d'échec.
METTRE À JOUR:
Merci à Elvis Ciotti qui a montré que createFromFormat accepte les dates non valides telles que 45/45/2014 . Plus d'informations à ce sujet: https://stackoverflow.com/a/10120725/1948627
J'ai étendu la méthode avec une option de vérification stricte:
static public function verifyDate($date, $strict = true)
{
$dateTime = DateTime::createFromFormat('m/d/Y', $date);
if ($strict) {
$errors = DateTime::getLastErrors();
if (!empty($errors['warning_count'])) {
return false;
}
}
return $dateTime !== false;
}
Vous pouvez vérifier cette ressource: http://php.net/manual/en/datetime.getlasterrors.php
Les codes PHP sont les suivants:
try {
$date = new DateTime('asdfasdf');
} catch (Exception $e) {
print_r(DateTime::getLastErrors());
// or
echo $e->getMessage();
}
Avec DateTime, vous pouvez créer le validateur de date et d’heure le plus court pour tous les formats.
function validateDate($date, $format = 'Y-m-d H:i:s')
{
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
var_dump(validateDate('2012-02-28 12:12:12')); # true
var_dump(validateDate('2012-02-30 12:12:12')); # false
Essaye ça:
function is_valid_date($date,$format='dmY')
{
$f = DateTime::createFromFormat($format, $date);
$valid = DateTime::getLastErrors();
return ($valid['warning_count']==0 and $valid['error_count']==0);
}
$date[] = '20/11/2569';
$date[] = 'lksdjflskdj';
$date[] = '11/21/1973 10:20:30';
$date[] = '21/11/1973 10:20:30';
$date[] = " ' or uid like '%admin%";
foreach($date as $dt)echo date('Y-m-d H:i:s', strtotime($dt))."\n";
Sortie
1970-01-01 05:30:00
1970-01-01 05:30:00
1970-01-01 05:30:00
1973-11-21 10:20:30
1970-01-01 05:30:00
1970-01-01 05:30:00