W3docs

mktime()

Apprenez la fonction PHP mktime() : ordre des arguments, normalisation des dates, comportement des fuseaux horaires et calculs de dates.

La fonction PHP mktime() construit un timestamp Unix à partir de parties individuelles de date et d'heure — heure, minute, seconde, mois, jour et année. C'est l'inverse de date() : là où date() transforme un timestamp en chaîne formatée, mktime() transforme les parties d'une date en timestamp que vous pouvez stocker, comparer ou utiliser dans des calculs arithmétiques.

Ce chapitre couvre l'ordre des arguments (qui déroute presque tout le monde), la façon dont mktime() normalise automatiquement les valeurs hors plage, son comportement avec les fuseaux horaires, et quand utiliser les classes DateTime à la place.

Syntaxe

mktime(
    int $hour = (current hour),
    ?int $minute = (current minute),
    ?int $second = (current second),
    ?int $month  = (current month),
    ?int $day    = (current day),
    ?int $year   = (current year)
): int|false

Le premier argument, $hour, est requis depuis PHP 8.0 — appeler mktime() sans argument lève une ArgumentCountError. Tout argument omis utilise par défaut la partie correspondante de la date et de l'heure locales actuelles. La fonction retourne le timestamp sous forme d'entier, ou false si les arguments produisent une date hors de la plage valide.

Un timestamp Unix est le nombre de secondes écoulées depuis l'époque Unix — le 1er janvier 1970, 00:00:00 UTC. C'est la monnaie commune pour les dates en PHP, dans les bases de données et les systèmes d'exploitation.

Attention à l'ordre des arguments. mktime() prend l'heure avant la date : heure, minute, seconde, mois, jour, année. C'est différent de la façon dont nous écrivons habituellement les dates (année-mois-jour), ce qui en fait la source d'erreurs la plus courante.

Construire un timestamp spécifique

Pour représenter un moment précis, passez les six parties. Ici, nous construisons 14h30 le 15 juin 2024 :

php— editable, runs on the server

Nous définissons le fuseau horaire explicitement afin que le résultat soit reproductible. Sans date_default_timezone_set(), mktime() interprète les parties selon le fuseau horaire configuré sur le serveur, ce qui peut décaler le timestamp résultant.

Calculs de dates avec mktime()

Comme un timestamp est simplement un nombre de secondes, vous pouvez ajouter ou soustraire des secondes pour avancer ou reculer une date. Pour trouver la date 30 jours après un jour donné, ajoutez 30 × 86400 secondes (il y a 86 400 secondes dans une journée) :

Ajouter 30 jours à une date

php— editable, runs on the server

Cette approche en secondes brutes convient pour des jours entiers, mais elle ignore les transitions liées à l'heure d'été : un « jour » ne fait pas toujours exactement 86 400 secondes. Pour un calcul calendaire correct aux limites de l'heure d'été, utilisez plutôt DateTime::modify() ou DateInterval.

Normalisation automatique

Une fonctionnalité pratique de mktime() est qu'elle normalise les valeurs hors plage : elle les reporte sur la date correcte au lieu d'échouer. Passez le mois 13 et vous obtenez janvier de l'année suivante ; passez le jour 0 et vous obtenez le dernier jour du mois précédent :

php— editable, runs on the server

Cela rend mktime() pratique pour les calculs de type « dernier jour du mois » : mktime(0, 0, 0, $month + 1, 0, $year) donne le dernier jour de $month. Notez que cette tolérance signifie aussi que mktime() ne rejettera pas une date clairement invalide comme le 30 février — elle la reporte silencieusement. Si vous devez valider une date du calendrier, utilisez d'abord checkdate().

Pièges courants

  • Mauvais ordre des arguments. Écrire mktime(2024, 6, 15) en pensant que c'est année-mois-jour produit une date absurde. Rappel : l'heure d'abord, puis mois, jour, année.
  • Aucun argument en PHP 8. mktime() sans argument lève une ArgumentCountError. Pour obtenir le timestamp actuel, utilisez time() à la place.
  • Années à deux chiffres. Passez une année complète à quatre chiffres. Les valeurs comme 069 correspondent à 2000–2069 et 70100 à 1970–2000, ce qui est rarement ce que vous souhaitez.

mktime() vs. les classes DateTime

mktime() est procédurale et fonctionne avec le fuseau horaire local. Pour des parties en UTC, utilisez sa fonction sœur gmmktime(). Pour du nouveau code, préférez les classes orientées objet DateTime et DateTimeImmutable — elles transportent les informations de fuseau horaire, gèrent l'arithmétique avec prise en charge de l'heure d'été et évitent les calculs manuels en secondes :

php— editable, runs on the server

Conclusion

mktime() construit un timestamp Unix à partir de parties de date et d'heure, en normalisant automatiquement les valeurs hors plage — ce qui la rend pratique pour les calculs de dates rapides et les astuces du type « dernier jour du mois ». Gardez ses particularités à l'esprit : l'heure précède la date dans la liste des arguments, et un appel sans argument génère désormais une erreur (utilisez time() pour « maintenant »). Pour un travail correct avec les fuseaux horaires et l'heure d'été en PHP moderne, optez pour DateTimeImmutable et DateInterval. Consultez également checkdate() pour la validation et strtotime() pour l'analyse de chaînes de dates en langage naturel.

Pratique

Pratique
Que fait la fonction PHP mktime() ?
Que fait la fonction PHP mktime() ?
Was this page helpful?