La fonction date_get_last_errors() en PHP
Découvrez comment utiliser date_get_last_errors() en PHP pour récupérer les erreurs et avertissements liés aux dates.
En avez-vous assez de gérer les erreurs liées aux dates dans votre code PHP ? Si c'est le cas, vous avez de la chance. La fonction date_get_last_errors() de PHP est là pour vous aider.
Dans cet article, nous allons explorer en profondeur le fonctionnement de la fonction date_get_last_errors(), ses différents paramètres et la façon dont vous pouvez l'utiliser pour résoudre les problèmes liés aux dates dans votre code PHP.
Qu'est-ce que la fonction date_get_last_errors() ?
La fonction date_get_last_errors() est une fonction PHP intégrée (disponible depuis PHP 5.2.0) qui vous permet de récupérer des informations sur la dernière erreur ou le dernier avertissement lié à une date. Elle retourne un array associatif contenant warning_count, warnings, error_count et errors, qui fournissent les codes spécifiques et les descriptions textuelles de ce qui s'est mal passé lors de la dernière opération de date/heure.
Comment utiliser date_get_last_errors()
Pour utiliser la fonction date_get_last_errors(), vous l'appelez après l'échec d'une fonction de création ou de modification de date. Pour un code prêt pour la production, vous devez toujours vérifier que la fonction de date a retourné false avant de récupérer les détails de l'erreur. Voici un exemple :
Dans cet exemple, nous tentons de créer un objet date à partir de la chaîne '2022-13-01', qui est une valeur de date invalide (le mois 13 n'existe pas). Après avoir vérifié que date_create_from_format() a retourné false, nous appelons date_get_last_errors() et affichons le tableau retourné à l'aide de print_r().
Le résultat de ce code sera :
Array
(
[warning_count] => 1
[warnings] => Array
(
[10] => The parsed date was invalid
)
[error_count] => 0
[errors] => Array
(
)
)Comme vous pouvez le voir, le tableau retourné fait la distinction entre les avertissements et les erreurs :
- Les erreurs signifient que l'entrée n'a pas pu être analysée du tout (par exemple, un caractère parasite ou un format qui ne correspond pas à la chaîne).
- Les avertissements signifient que la chaîne a été analysée, mais que le résultat est douteux — comme un composant hors plage. Le mois
13n'existe pas, donc PHP l'enroule ou le rejette et génère l'avertissement[10] => The parsed date was invalid.
Attention : la valeur de retour en l'absence d'erreurs
Un piège courant est que la valeur de retour a changé selon les versions de PHP :
- PHP 5.2 – 8.1 : retourne toujours le tableau associatif, avec
warning_counteterror_countà0lorsque rien ne s'est mal passé. - PHP 8.2 et versions ultérieures : retourne
false(boolean) lorsque l'opération de date précédente n'a produit ni avertissements ni erreurs.
C'est précisément pourquoi vous devez vous baser sur le résultat de la fonction de date elle-même plutôt que sur date_get_last_errors() :
<?php
// A valid date — parsing succeeds.
$result = date_create_from_format('Y-m-d', '2022-01-15');
if ($result === false) {
// This branch is skipped because the date is valid.
print_r(date_get_last_errors());
} else {
echo "Parsed successfully: " . $result->format('Y-m-d');
}
?>Résultat :
Parsed successfully: 2022-01-15Étant donné que $result est un objet DateTime valide, nous n'appelons jamais date_get_last_errors() — évitant ainsi entièrement la surprise false-vs-array selon la version.
Flux de débogage pratique
Lorsque vous gérez l'analyse de dates en production, suivez ce schéma pour capturer et journaliser les problèmes en toute sécurité :
- Appelez la fonction de création de date (par ex.,
date_create_from_format()ouDateTime::createFromFormat()). - Vérifiez si le résultat est
false. - Si
false, appelezdate_get_last_errors()pour inspecter les tableauxwarningseterrors. - Journalisez ou affichez les codes et messages d'avertissement/erreur spécifiques pour identifier le problème d'analyse exact sans interrompre votre application.
Paramètres
La fonction date_get_last_errors() ne prend aucun paramètre. Elle retourne simplement des informations sur la dernière erreur ou le dernier avertissement lié à une date (un array associatif, ou false sur PHP 8.2+ lorsqu'il n'y en avait aucun).
Équivalent orienté objet
Si vous travaillez avec la classe DateTime plutôt qu'avec les fonctions procédurales, les mêmes informations sont disponibles via la méthode statique DateTime::getLastErrors() :
<?php
$result = DateTime::createFromFormat('Y-m-d', 'not-a-date');
if ($result === false) {
print_r(DateTime::getLastErrors());
}
?>Résultat :
Array
(
[warning_count] => 0
[warnings] => Array
(
)
[error_count] => 3
[errors] => Array
(
[0] => A four digit year could not be found
[10] => Not enough data available to satisfy format
)
)Cette fois, la chaîne ne peut pas être analysée du tout, donc les problèmes sont signalés comme des erreurs (et non des avertissements). DateTime::getLastErrors() retourne la même structure que date_get_last_errors() et suit les mêmes règles de version décrites ci-dessus.
Fonctions associées
date_create_from_format()— analyser une chaîne de date selon un format explicite ; la fonction dont vous inspectez les erreurs ici.date_create()— créer un objetDateTimeà partir d'une chaîne de date flexible.checkdate()— valider une date grégorienne avant de tenter de l'analyser.date()— formater un horodatage une fois que vous avez une date valide.
Conclusion
La fonction date_get_last_errors() est un outil précieux pour tout développeur PHP qui doit résoudre des erreurs liées aux dates. En exposant l'avertissement ou l'erreur spécifique survenu lors de la dernière opération de date/heure, elle vous permet de déboguer les problèmes d'analyse sans interrompre votre application. N'oubliez pas les deux bonnes pratiques clés : toujours vous baser sur la valeur de retour de la fonction de date elle-même (false), et tenir compte du changement introduit en PHP 8.2+ où date_get_last_errors() elle-même retourne false lorsque rien ne s'est mal passé.