date_parse()
La fonction date_parse() en PHP analyse une chaîne de date et la convertit en un tableau associatif représentant ses composants.
Introduction
La fonction date_parse() en PHP prend une chaîne de date lisible par l'humain et la décompose en ses composants individuels — année, mois, jour, heure, minute, seconde — en les retournant sous forme de tableau associatif. Elle signale également les avertissements et les erreurs rencontrés lors de l'interprétation de la chaîne, ce qui en fait un outil utile pour valider les entrées de date avant de les exploiter.
Contrairement à strtotime(), qui réduit une chaîne de date à un simple horodatage Unix, date_parse() conserve chaque partie séparément et ne supprime jamais les informations de diagnostic. C'est la principale raison de l'utiliser : lorsque vous avez besoin de savoir non seulement quelle est une date, mais aussi si l'entrée était réellement une date valide.
Cette page couvre la syntaxe, la structure complète du tableau retourné, comment lire les avertissements et les erreurs, et comment date_parse() se compare aux fonctions associées.
Syntaxe
date_parse(string $datetime): arrayElle retourne toujours un tableau (elle ne retourne jamais false) ; en cas d'échec d'analyse, l'échec est décrit dans la clé errors plutôt que signalé par la valeur de retour.
Paramètres
$datetime — une string représentant la date/heure à analyser. Elle accepte les mêmes formats flexibles compris par l'analyseur de date interne de PHP, par exemple :
'2022-03-03 15:30:45'— date et heure complètes au format ISO'July 4, 2023'— langage naturel'now','tomorrow','+1 week'— expressions relatives
Si un composant est absent de la chaîne (par exemple, aucune heure n'est fournie), sa clé est retournée avec une valeur vide plutôt qu'omise.
Valeur de retour
La fonction retourne un tableau associatif avec les clés suivantes :
year,month,day— les composants de la date (entiers, ou vides si absents)hour,minute,second— les composants de l'heure (entiers, ou vides si absents)fraction— la partie fractionnaire des secondes (un flottant, ex.0)warning_count— le nombre d'avertissements générés lors de l'analysewarnings— un array d'avertissements, indexé par la position du caractère dans l'entréeerror_count— le nombre d'erreurs générées lors de l'analyseerrors— un array d'erreurs, indexé par la position du caractère dans l'entréeis_localtime— indique si la chaîne contenait des informations de fuseau horaire
Lorsque is_localtime est true, des clés supplémentaires telles que zone_type, zone et is_dst décrivent le fuseau horaire.
Exemple de base
Analysons une chaîne complète de date et d'heure :
Résultat :
Array
(
[year] => 2022
[month] => 3
[day] => 3
[hour] => 15
[minute] => 30
[second] => 45
[fraction] => 0
[warning_count] => 0
[warnings] => Array()
[error_count] => 0
[errors] => Array()
[is_localtime] =>
)Chaque composant est maintenant disponible individuellement — par exemple, $date_arr['month'] vaut 3. Comme error_count et warning_count sont tous les deux à 0, nous savons que la chaîne était une date valide et propre.
Analyse d'une date partielle
date_parse() ne requiert pas une date complète. Si vous passez uniquement une date sans heure, les clés d'heure reviennent vides :
<?php
$result = date_parse('July 4, 2023');
echo "Year: {$result['year']}\n";
echo "Month: {$result['month']}\n";
echo "Day: {$result['day']}\n";
echo "Hour: '{$result['hour']}'\n"; // empty — no time was givenRésultat :
Year: 2023
Month: 7
Day: 4
Hour: ''Cela est pratique lorsque vous acceptez des dates sans heure et souhaitez obtenir les parties individuelles sans écrire un analyseur personnalisé.
Détection des dates invalides avec les avertissements
C'est là que date_parse() excelle. Prenons le 30 février — une date qui n'existe pas. L'analyseur retournera quand même des valeurs, mais signalera le problème dans warnings :
<?php
$result = date_parse('2023-02-30');
if ($result['warning_count'] > 0) {
foreach ($result['warnings'] as $position => $message) {
echo "Warning at position $position: $message\n";
}
}Résultat :
Warning at position 11: The parsed date was invalidVérifiez toujours error_count (la chaîne n'a pas pu être comprise du tout) et warning_count (la chaîne a été comprise mais décrit une date impossible) avant de faire confiance aux composants analysés. Pour une vérification calendaire stricte oui/non sur une année-mois-jour spécifique, combinez cela avec checkdate().
Quand utiliser date_parse() plutôt que les fonctions associées
| Fonction | Retourne | Utilisez-la quand |
|---|---|---|
date_parse() | Un array de composants + avertissements/erreurs | Vous avez besoin des parties individuelles et souhaitez valider l'entrée |
date_parse_from_format() | Le même array, mais analysé selon un format explicite | L'entrée suit un format connu et fixe que vous voulez imposer |
strtotime() | Un simple horodatage Unix | Vous avez juste besoin d'un horodatage pour des calculs |
date_create_from_format() | Un objet DateTime | Vous voulez un objet complet pour formater ou effectuer des calculs de date |
Si vous devez ensuite afficher une date, consultez date() pour mettre en forme les composants en chaîne.
Conclusion
La fonction date_parse() offre un moyen simple de décomposer une chaîne de date en ses composants individuels tout en signalant les avertissements et les erreurs rencontrés. Ce double rôle — extraction et validation — la rend particulièrement utile pour vérifier les dates fournies par l'utilisateur avant de les traiter. Combinez-la avec checkdate() pour une validation stricte, ou avec strtotime() et DateTime lorsque vous avez besoin d'horodatages ou d'objets de date complets.