Un format de date PHP est une chaîne où des lettres représentent des parties de la date : date('Y-m-d H:i:s') affiche quelque chose comme 2026-03-14 09:05:07. Y est l'année sur 4 chiffres, m le mois, d le jour, H l'heure (sur 24 heures), i les minutes et s les secondes ; tout caractère qui n'est pas une lettre de format, comme -, / ou :, est affiché tel quel. Les mêmes chaînes de format fonctionnent dans date() et dans DateTimeImmutable::format().
Modifiez $format et cliquez sur Run. La date est fixée au samedi 14 mars 2026 à 09:05:07, pour que vous voyiez exactement ce que fait chaque lettre :
Sortie :
Sat, 14 Mar 2026 09:05
2026-03-14
14/03/2026
Saturday, March 14th, 2026
9:05 AM
date($format) formate l'instant présent et date($format, $timestamp) un timestamp ; $date->format($format) formate un objet date. Tout le reste sur les dates, de strtotime() aux fuseaux horaires, est sur la page PHP date().
Les caractères de format de date
Chaque exemple ci-dessous est le résultat pour 2026-03-14 09:05:07.123456 UTC.
Jour
| Caractère | Signification | Exemple |
|---|---|---|
d | Jour du mois, 2 chiffres avec zéro initial (01 à 31) | 14 |
j | Jour du mois sans zéro initial (1 à 31) | 14 |
D | Nom court du jour, 3 lettres | Sat |
l (L minuscule) | Nom complet du jour | Saturday |
N | Jour de la semaine ISO, 1 (lundi) à 7 (dimanche) | 6 |
w | Jour de la semaine, 0 (dimanche) à 6 (samedi) | 6 |
S | Suffixe anglais du jour : st, nd, rd ou th. À utiliser après j | th |
z | Jour de l'année, à partir de 0 | 72 |
Semaine et mois
| Caractère | Signification | Exemple |
|---|---|---|
W | Numéro de semaine ISO 8601 (les semaines commencent le lundi) | 11 |
F | Nom complet du mois | March |
M | Nom court du mois, 3 lettres | Mar |
m | Numéro du mois avec zéro initial (01 à 12) | 03 |
n | Numéro du mois sans zéro initial (1 à 12) | 3 |
t | Nombre de jours dans le mois | 31 |
Année
| Caractère | Signification | Exemple |
|---|---|---|
Y | Année complète, au moins 4 chiffres | 2026 |
y | Année, 2 chiffres | 26 |
L | 1 si c'est une année bissextile, sinon 0 | 0 |
o | Année de numérotation des semaines ISO 8601 (à utiliser avec W) | 2026 |
X | Année complète étendue avec un signe (PHP 8.2+) | +2026 |
x | Année complète étendue, signe seulement si nécessaire (PHP 8.2+) | 2026 |
Heure
| Caractère | Signification | Exemple |
|---|---|---|
H | Heure sur 24 heures, zéro initial (00 à 23) | 09 |
G | Heure sur 24 heures, sans zéro initial (0 à 23) | 9 |
h | Heure sur 12 heures, zéro initial (01 à 12) | 09 |
g | Heure sur 12 heures, sans zéro initial (1 à 12) | 9 |
i | Minutes avec zéro initial (00 à 59) | 05 |
s | Secondes avec zéro initial (00 à 59) | 07 |
a | am ou pm | am |
A | AM ou PM | AM |
v | Millisecondes | 123 |
u | Microsecondes (toujours 000000 dans date(), qui prend des secondes entières) | 123456 |
B | Heure Internet Swatch (000 à 999) | 420 |
Fuseau horaire
| Caractère | Signification | Exemple |
|---|---|---|
e | Identifiant du fuseau horaire | UTC |
T | Abréviation du fuseau horaire | UTC |
P | Décalage par rapport à UTC avec deux-points | +00:00 |
p | Comme P, mais Z pour UTC | Z |
O | Décalage par rapport à UTC sans deux-points | +0000 |
Z | Décalage en secondes | 0 |
I (i majuscule) | 1 pendant l'heure d'été, sinon 0 | 0 |
Date et heure complètes
| Caractère | Signification | Exemple |
|---|---|---|
c | Date et heure ISO 8601 | 2026-03-14T09:05:07+00:00 |
r | Date RFC 2822, utilisée dans les en-têtes d'email | Sat, 14 Mar 2026 09:05:07 +0000 |
U | Timestamp Unix (secondes depuis le 1970-01-01 UTC) | 1773479107 |
Le même tableau, en direct : ce bloc affiche chaque caractère pour une date de votre choix. Mettez votre date d'anniversaire, une date dans l'après-midi, ou une date à la fin d'une année bissextile :
Afficher des lettres et des mots dans un format
Toute lettre d'une chaîne de format est lue comme un caractère de format, donc 'Today is l' n'affiche pas « Today is » : T, o, d, a, y, i et s sont tous des caractères de format. Placez une barre oblique inverse devant chaque lettre que vous voulez afficher telle quelle. Dans une chaîne entre guillemets doubles, \t est déjà une tabulation, utilisez donc des guillemets simples pour les formats contenant des barres obliques inverses :
Sortie :
UTC202614am26 0507 Saturday
Today is Saturday
Saturday the 14th of March
2026-03-14T09:05:07
Saturday 09UTC 14th
Les formats de date courants
La plupart du code n'a besoin que de quelques formats. Ce bloc les affiche sous forme de tableau HTML, visible dans l'onglet Page :
Stockez et comparez les dates au format Y-m-d ou Y-m-d H:i:s : des chaînes dans cet ordre se trient comme les dates, ce que ne font pas les chaînes d/m/Y.
ISO 8601, DATE_ATOM et autres formats standard
PHP a des constantes pour les formats qu'attendent les API, les flux et les cookies. DATE_ATOM (aussi DateTimeInterface::ATOM) correspond à l'ISO 8601 et au RFC 3339, le format qu'utilisent les API JSON :
Sortie :
2026-03-14T09:05:07+00:00
2026-03-14T09:05:07+00:00
2026-03-14T09:05:07.000+00:00
Sat, 14 Mar 2026 09:05:07 +0000
Sat, 14 Mar 2026 09:05:07 +0000
Saturday, 14-Mar-2026 09:05:07 UTC
Y-m-d\TH:i:sP
Il existe aussi une constante DATE_ISO8601, mais son décalage n'a pas de deux-points (+0000), ce que l'ISO 8601 n'autorise pas sous cette forme ; utilisez DATE_ATOM.
Format de date japonais (Y年m月d日)
Les caractères qui ne sont pas des lettres de format sont affichés tels quels, y compris les kanji, donc 'Y年n月j日' fonctionne tel quel. n et j suppriment le zéro initial (3月14日), m et d le gardent (03月14日). Le nom du jour est la seule partie que date() ne peut pas traduire, car elle ne connaît que les noms anglais ; associez plutôt le numéro w à votre propre liste :
Sortie :
2026年3月14日
2026年03月14日 09時05分
2026年3月14日(土)
2026/03/14
Pour une localisation complète, y compris les noms de mois dans d'autres langues et l'ère japonaise (令和), le IntlDateFormatter de l'extension intl formate avec des motifs de locale. Il utilise les lettres de motif ICU (yyyy, MM, EEEE), pas les caractères PHP de cette page :
<?php
$formatter = new IntlDateFormatter('ja_JP', IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'Asia/Tokyo');
echo $formatter->format(new DateTimeImmutable('2026-03-14')); // 2026年3月14日土曜日
$era = new IntlDateFormatter('ja_JP@calendar=japanese', IntlDateFormatter::LONG, IntlDateFormatter::NONE, 'Asia/Tokyo', IntlDateFormatter::TRADITIONAL);
echo $era->format(new DateTimeImmutable('2026-03-14')); // 令和8年3月14日
Convertir une date d'un format à un autre
Pour transformer 14/03/2026 en 2026-03-14, analysez la chaîne avec le format dans lequel elle est écrite, avec DateTimeImmutable::createFromFormat(), puis formatez-la à nouveau. Elle utilise les mêmes caractères que le tableau. Commencez le format par !, sinon les champs que vous n'avez pas donnés (ici l'heure) sont remplis avec l'instant présent :
Sortie :
2026-03-14 00:00:00
March 14, 2026
bool(false)
2026-03-03
Array
(
[10] => The parsed date was invalid
)
Pour des dates tapées par des utilisateurs, traitez tout warning de getLastErrors() comme une date invalide, de la même façon que false.
Erreurs fréquentes avec les formats de date
Trois bugs reviennent sans cesse : m à la place de i, Y au lieu de y, et laisser strtotime() deviner l'ordre du jour et du mois. strtotime() lit les barres obliques dans l'ordre américain mois/jour et les tirets ou points dans l'ordre jour-mois, donc les mêmes chiffres donnent deux dates différentes :
Sortie :
09:03:07
09:05:07
14/03/26
2026-03-04
2026-04-03
bool(false)
Quand vous connaissez le format de l'entrée, indiquez-le avec createFromFormat() au lieu de laisser strtotime() deviner.
Questions fréquentes
Que signifie date('Y-m-d') en PHP ?
Chaque lettre est remplacée par une partie de la date : Y est l'année sur 4 chiffres, m le mois avec un zéro initial et d le jour avec un zéro initial, et les tirets sont affichés tels quels. Le 14 mars 2026, cela renvoie 2026-03-14.
Comment convertir une date d'un format à un autre en PHP ?
Analysez-la avec le format dans lequel elle est écrite, puis formatez-la avec celui que vous voulez : DateTimeImmutable::createFromFormat('!d/m/Y', '14/03/2026')->format('Y-m-d') renvoie 2026-03-14. createFromFormat() renvoie false quand la chaîne ne correspond pas, vérifiez donc cela d'abord.
Quelle est la différence entre m et i dans un format de date PHP ?
m est le mois (01 à 12) et i les minutes (00 à 59). Écrire 'H:m' au lieu de 'H:i' est un bug courant : l'heure affiche le numéro du mois à la place des minutes.
Comment formater une date en ISO 8601 en PHP ?
Utilisez le caractère c ou la constante DATE_ATOM : $date->format(DATE_ATOM) renvoie 2026-03-14T09:05:07+00:00. Évitez DATE_ISO8601 : son décalage n'a pas de deux-points (+0000), ce qui n'est pas de l'ISO 8601 valide.
Comment afficher le jour de la semaine en français ou en japonais avec date() ?
date() n'affiche que des noms anglais, associez donc le numéro w (0 pour dimanche à 6 pour samedi) à votre propre liste : ['日','月','火','水','木','金','土'][$date->format('w')]. Avec l'extension intl, IntlDateFormatter peut formater des dates complètes dans n'importe quelle locale.