date('Y-m-d') renvoie la date du jour sous forme de chaîne, comme 2026-03-14. Le premier argument est une chaîne de format où chaque lettre représente une partie de la date (Y l'année, m le mois, d le jour, H:i:s l'heure), et un second argument facultatif est un timestamp Unix à formater à la place de l'instant présent.
La sortie change chaque fois que vous cliquez sur Run, car c'est la date et l'heure actuelles en UTC. Chaque lettre de la chaîne de format, et la façon d'insérer du texte entre elles, sont sur la page format de date PHP.
Timestamps : time(), mktime() et strtotime()
Un timestamp Unix est le nombre de secondes écoulées depuis le 1er janvier 1970 à minuit UTC. time() renvoie celui de l'instant présent, mktime(hour, minute, second, month, day, year) en construit un à partir de ses parties, et strtotime() lit une date écrite en anglais ('2026-03-14', '+1 week', 'next monday'). Passez n'importe quel timestamp en second argument de date(). Le second argument de strtotime() est l'instant à partir duquel compte une expression relative ; sans lui, elle compte à partir de maintenant.
Sortie :
1773480600
Sat, 14 Mar 2026 09:30
2027-01-01
tomorrow Sun 2026-03-15
+1 week Sat 2026-03-21
next monday Mon 2026-03-16
last day of this month Tue 2026-03-31
first monday of next month Mon 2026-04-06
bool(false)
Le report dans mktime() est utile : le jour 0 d'un mois est le dernier jour du mois précédent, donc mktime(0, 0, 0, 3, 0, 2026) est le 28 février. Comparez toujours le résultat avec false avant de le transmettre : date('Y-m-d', false) affiche sans prévenir 1970-01-01, une date que personne ne voulait.
Ajouter des jours à une date
Pour tout ce qui va au-delà de l'affichage, utilisez DateTimeImmutable. Sa méthode modify() accepte les mêmes expressions que strtotime() et renvoie une nouvelle date, et add() prend un DateInterval comme P7D (une période de 7 jours) ou PT90M (90 minutes).
Sortie :
2026-03-21
2026-03-13
2026-04-14
11:00
2025-03-14
2026-03-03
2026-02-28
Le 31 février n'existe pas, donc +1 month sur le 31 janvier tombe le 3 mars. Quand vous voulez dire « la fin du mois prochain », dites-le avec last day of next month.
DateTime ou DateTimeImmutable
DateTime se modifie lui-même quand vous appelez modify(), add() ou setDate(), et renvoie le même objet. Cela surprend ceux qui gardent la date d'origine dans une variable :
Sortie :
2026-03-21
2026-03-21
bool(true)
2026-03-14
2026-03-21
Préférez DateTimeImmutable dans du code neuf. Les deux classes ont les mêmes méthodes et implémentent toutes deux DateTimeInterface, donc une fonction peut accepter l'une ou l'autre.
Différence entre deux dates
diff() renvoie un DateInterval. Sa propriété days est le nombre total de jours entre les deux dates, alors que y, m et d découpent l'écart en années, mois et jours, exactement ce qu'il faut pour un calcul d'âge. Modifiez les dates et relancez :
Sortie :
Age: 35
Exactly: 35 years, 7 months, 22 days
Days alive: 13021
286 days to go
9 months and 11 days
-286 days
Dans format(), %a est le nombre total de jours et %d seulement la partie jours, donc %a est celui à utiliser pour « jours restants ». Pour comparer deux dates sans calculer d'écart, les opérateurs habituels fonctionnent sur les objets date : $today < $christmas vaut true.
Fuseaux horaires
date() et new DateTimeImmutable() utilisent le fuseau horaire par défaut, qui vient de date.timezone dans php.ini (UTC s'il n'est pas défini). Définissez-le pour tout le script avec date_default_timezone_set(), ou donnez à une seule date son propre DateTimeZone et convertissez avec setTimezone() :
Sortie :
Asia/Tokyo 2026-03-14 18:30 JST +09:00
Europe/Berlin 2026-03-14 10:30 CET +01:00
America/New_York 2026-03-14 05:30 EDT -04:00
Asia/Tokyo
2026-03-14 18:30
Un timestamp est le même nombre partout ; le fuseau horaire ne change que sa façon d'être écrit. C'est pourquoi le conseil habituel est de stocker les dates en UTC et de les convertir à l'affichage.
Afficher un calendrier sur une page web
Les dates sont le plus souvent affichées dans du HTML. Ce bloc dessine le mois en cours sous forme de calendrier et met en évidence le jour actuel. Exécutez-le, puis cliquez sur Previous ou Next : le même script s'exécute à nouveau avec $_GET['m'] défini par le lien, comme ?m=2026-04.
format('N') donne le jour de la semaine de 1 (lundi) à 7 (dimanche), soit le nombre de cases vides avant le 1er, et format('t') donne le nombre de jours du mois. Le ! dans '!Y-m' réinitialise chaque champ que le format ne mentionne pas, donc le jour est le 1er et l'heure minuit.
Erreurs fréquentes avec date()
Le second argument de date() doit être un timestamp, pas une chaîne de date. Cette ligne :
<?php
echo date('d/m/Y', '2026-03-14');
arrête le script avec une TypeError :
PHP Fatal error: Uncaught TypeError: date(): Argument #2 ($timestamp) must be of type ?int, string given in /home/index.php:2
Convertissez d'abord la chaîne, avec strtotime() ou un objet :
Sortie :
14/03/2026
14/03/2026
bool(false)
bool(true)
Deux autres pièges : m est le mois et i les minutes, donc 'H:m' affiche le mois là où vous vouliez les minutes ; et new DateTimeImmutable('garbage') lève une exception au lieu de renvoyer false, entourez donc une saisie utilisateur de try/catch ou analysez-la avec DateTimeImmutable::createFromFormat(), qui renvoie false en cas de non-correspondance.
Questions fréquentes
Comment obtenir la date du jour en PHP ?
Appelez date() avec une chaîne de format : echo date('Y-m-d'); affiche la date du jour comme 2026-03-14, et date('Y-m-d H:i:s') ajoute l'heure. La version objet est (new DateTimeImmutable())->format('Y-m-d').
Comment ajouter des jours à une date en PHP ?
Utilisez modify() sur un DateTimeImmutable : (new DateTimeImmutable('2026-03-14'))->modify('+7 days')->format('Y-m-d') donne 2026-03-21. Avec des timestamps, date('Y-m-d', strtotime('+7 days', $timestamp)) fait la même chose.
Comment calculer la différence entre deux dates en PHP ?
Appelez diff() sur une date avec l'autre : $a->diff($b) renvoie un DateInterval. Sa propriété days est le nombre total de jours, et y, m, d contiennent les années, mois et jours, ce qui permet de calculer l'âge de quelqu'un.
Comment convertir un timestamp Unix en date en PHP ?
Passez-le en second argument de date() : date('Y-m-d H:i:s', 1773479107) renvoie 2026-03-14 09:05:07 en UTC. Pour un objet, utilisez new DateTimeImmutable('@1773479107').
Pourquoi date() affiche-t-elle une mauvaise heure en PHP ?
date() utilise le fuseau horaire par défaut, qui vient de date.timezone dans php.ini et vaut souvent UTC. Définissez le vôtre avec date_default_timezone_set('Europe/Berlin') en haut du script, ou passez un DateTimeZone à DateTimeImmutable.