J'ai utilisé la classe DateTime en PHP parce que date() a les inconvénients d'Unix Timestamp. Cependant, aucune approche ne détecte des dates non valides pour les mois qui n'ont pas 31 jours mais qui tentent d'utiliser le 31ème jour.Comment puis-je attraper '02/31/2010 'comme une date invalide en utilisant la classe DateTime?
Exemple de code:
try {
$date = new DateTime('02/31/2018');
$formattedDate = $date->format('Y-m-d');
} catch (Exception $e) {}
echo $formattedDate;
Résultat:
2018-03-03
Mise à jour 1: Pour utiliser checkdate() J'ai besoin des éléments constitutifs de la date. Pour obtenir cela, je vais devoir instancier un objet DateTime avec la chaîne de date en tant que constructeur. Dans le cas de '02/31/2018 ', il le convertira en '03/03/2018' lorsqu'il sera instancié. À ce stade, il sera trop tard pour exécuter le composant mois, jour, année via checkdate(). Quelle est la solution?
Mise à jour 2: Obtenir la partie composante des dates est facile si je force un format spécifique (par exemple mm/jj/aaaa), mais si je l'accepte tous les formats acceptés par strtotime(), je ne peux pas effectuer une checkdate avant de l'exécuter via strtotime() -> date() ou DateTime :: __ construct -> DateTime :: format().