W3docs

Fonction PHP strtotime : Comprendre l'analyse des dates et heures

Découvrez la fonction strtotime de PHP pour analyser et manipuler les chaînes de dates et d'heures avec des exemples et bonnes pratiques.

En programmation PHP, travailler avec les dates et les heures est une tâche courante qui peut s'avérer complexe en raison de la variété des formats et des fuseaux horaires utilisés dans différents systèmes et applications. La fonction strtotime est un outil puissant qui permet aux développeurs d'analyser et de manipuler facilement les chaînes de dates et d'heures, mais elle nécessite une bonne compréhension de sa syntaxe et de ses options pour éviter les erreurs et les résultats inattendus. Dans cet article, nous allons explorer la fonction strtotime et son utilisation en détail, en fournissant des exemples et des conseils pour vous aider à améliorer vos compétences en programmation PHP.

Qu'est-ce que la fonction strtotime ?

La fonction strtotime est une fonction PHP intégrée qui convertit une représentation sous forme de chaîne d'une date et/ou d'une heure en un timestamp Unix, c'est-à-dire une valeur numérique représentant le nombre de secondes écoulées depuis le 1er janvier 1970, 00:00:00 UTC (Temps Universel Coordonné). Le timestamp Unix est un format largement utilisé pour stocker et manipuler les dates et les heures dans de nombreux langages de programmation et systèmes, et il permet une comparaison, un calcul et un formatage faciles des dates et des heures.

La syntaxe de la fonction strtotime est la suivante :

Syntaxe de la fonction strtotime()

<?php

strtotime ( string $time [, int $now = time() ] ) : int|false

$time est la chaîne d'entrée contenant la date et/ou l'heure à analyser, et $now est un paramètre optionnel qui spécifie le timestamp de référence utilisé pour les calculs relatifs. La fonction renvoie un timestamp Unix si la chaîne d'entrée est valide, ou false si la chaîne ne peut pas être analysée.

Étant donné que la valeur de retour n'est qu'un nombre de secondes, on l'associe presque toujours à date() pour la retransformer en quelque chose de lisible par l'humain :

<?php

date_default_timezone_set('UTC');

$timestamp = strtotime("2023-03-03");
echo $timestamp;                                  // 1677801600
echo date("Y-m-d H:i:s", $timestamp);             // 2023-03-03 00:00:00

Comment utiliser la fonction strtotime ?

La fonction strtotime prend en charge un large éventail de formats d'entrée et de modificateurs qui peuvent être combinés pour analyser diverses expressions de dates et d'heures. Voici quelques-uns des formats et modificateurs les plus courants :

  • Formats de date : YYYY-MM-DD, MM/DD/YYYY, DD-MM-YYYY, YYYY.MM.DD, etc.
  • Formats d'heure : HH:MM:SS, HH:MM, H:M:S AM/PM, HH:MM:SS +/-HHMM, etc.
  • Décalages de fuseau horaire : +HHMM, -HHMM, Z, etc.
  • Expressions relatives : now, yesterday, today, tomorrow, last/next day/week/month/year, +/- N days/weeks/months/years, first/last day/weekday/week/month/year of month/year, etc.

Pour utiliser la fonction strtotime, vous devez passer une chaîne contenant un ou plusieurs de ces formats et modificateurs, et la fonction tentera de les interpréter et de les convertir en timestamp Unix. Voici quelques exemples :

Comment utiliser la fonction strtotime ?

php— editable, runs on the server

Comme vous pouvez le constater, la fonction strtotime peut gérer divers formats d'entrée et expressions relatives, mais il est important de noter que le comportement de la fonction peut varier en fonction du fuseau horaire du système, de la version de PHP et de la syntaxe et du contexte de la chaîne d'entrée. Par conséquent, il est recommandé d'utiliser la fonction strtotime avec précaution et de toujours tester et valider le résultat avant de l'utiliser dans du code de production.

Calculs de dates relatives

L'une des fonctionnalités les plus utiles de strtotime() est l'analyse d'expressions relatives par rapport à un timestamp de base. Cela rend triviales des questions comme « quelle est la date dans une semaine ? » ou « le premier jour du mois prochain » :

<?php

date_default_timezone_set('UTC');

$base = strtotime("2023-03-03");

echo date("Y-m-d", strtotime("+1 week", $base));                  // 2023-03-10
echo date("Y-m-d", strtotime("first day of next month", $base));  // 2023-04-01

Gestion de la valeur de retour false

strtotime() renvoie false (et non une exception) lorsqu'elle ne peut pas comprendre l'entrée. Notez que false est globalement égal à 0, donc vérifiez toujours avec l'opérateur strict === — sinon une analyse échouée peut être confondue avec l'epoch (1er janvier 1970) :

<?php

$timestamp = strtotime("not a real date");

var_dump($timestamp);             // bool(false)

if ($timestamp === false) {
    echo "Could not parse the date.";
} else {
    echo date("Y-m-d", $timestamp);
}

Conseils et bonnes pratiques

Voici quelques conseils et bonnes pratiques à suivre lors de l'utilisation de la fonction strtotime dans votre code PHP :

  1. Toujours assainir et valider les entrées utilisateur : Étant donné que la fonction strtotime accepte les entrées utilisateur sous forme de chaîne, il est important de s'assurer que l'entrée est propre et sûre à utiliser. Vous pouvez utiliser des fonctions comme trim, strip_tags, htmlspecialchars et des expressions régulières pour filtrer les caractères indésirables et prévenir les attaques par injection.
  2. Utiliser des formats et des fuseaux horaires explicites : Pour éviter toute ambiguïté et toute erreur, il est recommandé d'utiliser des formats de date et d'heure explicites, tels que ISO 8601, et de spécifier le fuseau horaire explicitement, soit sous forme de chaîne, soit sous forme d'objet DateTimeZone. Cela peut être réalisé à l'aide de fonctions comme date, gmdate, DateTime, DateTimeImmutable et DateTimeZone.
  3. Tester et déboguer votre code : Pour vous assurer que votre fonction strtotime fonctionne comme prévu, vous devriez la tester avec diverses chaînes d'entrée, cas limites et scénarios, et vérifier le résultat par rapport à vos attentes. Vous pouvez utiliser des outils comme var_dump, print_r et assert pour déboguer votre code et détecter les erreurs.
  4. Envisager d'utiliser des bibliothèques alternatives de dates et d'heures : Bien que la fonction strtotime soit un outil pratique et puissant, elle présente certaines limitations et particularités qui peuvent poser des problèmes dans certaines situations. Par conséquent, vous pouvez envisager d'utiliser des bibliothèques alternatives de dates et d'heures, comme Carbon ou Chronos, qui offrent plus de fonctionnalités et de flexibilité.

Note sur le PHP moderne : Pour les nouveaux projets, les classes DateTime et DateTimeImmutable sont fortement recommandées plutôt que strtotime en raison d'une meilleure fiabilité, d'une conception orientée objet et d'une gestion explicite des fuseaux horaires. Utilisez strtotime principalement pour le code hérité ou l'analyse simple de dates relatives. Voir date_create et date_modify pour les équivalents orientés objet.

Fonctions associées

  • date — formate un timestamp Unix en chaîne lisible.
  • mktime — construit un timestamp à partir de parties de date individuelles plutôt qu'une chaîne.
  • time — renvoie le timestamp Unix actuel.
  • date_create — la manière moderne et orientée objet d'analyser les dates.
  • PHP Date et Heure — aperçu de l'ensemble des outils de date/heure de PHP.

Conclusion

Dans cet article, nous avons exploré la fonction strtotime en PHP et son utilisation pour analyser et manipuler les chaînes de dates et d'heures. Nous avons vu comment la fonction fonctionne, quels formats et modificateurs elle prend en charge, et quels conseils et bonnes pratiques suivre lors de son utilisation dans votre code. En appliquant ces principes, vous pouvez améliorer vos compétences en programmation PHP et écrire un code de gestion des dates plus fiable. N'oubliez pas de toujours valider et assainir les entrées utilisateur, d'utiliser des formats et des fuseaux horaires explicites, de tester et déboguer votre code, et d'envisager d'utiliser des bibliothèques alternatives si nécessaire. Bonne programmation !

graph TD;
A[strtotime Function] --> B[Unix timestamp];
B --> C[Date comparison];
B --> D[Date calculation];
B --> E[Date formatting];
C --> F[Equal to];
C --> G[Greater than];
C --> H[Less than];
D --> I[Addition];
D --> J[Subtraction];
E --> K[Textual representation];
E --> L[Numeric representation];

Pratique

Pratique
Quel est le rôle de la fonction 'strtotime' en PHP ?
Quel est le rôle de la fonction 'strtotime' en PHP ?
Was this page helpful?