Menu

Format de date PHP : tous les caractères de date()

Un format de date PHP est une chaîne de lettres comme 'Y-m-d H:i:s', où Y est l'année sur 4 chiffres, m le mois, d le jour, H l'heure, i les minutes et s les secondes. Voici chaque caractère de format avec un exemple, plus l'échappement, l'ISO 8601, les dates japonaises et la conversion d'un format à un autre.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

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èreSignificationExemple
dJour du mois, 2 chiffres avec zéro initial (01 à 31)14
jJour du mois sans zéro initial (1 à 31)14
DNom court du jour, 3 lettresSat
l (L minuscule)Nom complet du jourSaturday
NJour de la semaine ISO, 1 (lundi) à 7 (dimanche)6
wJour de la semaine, 0 (dimanche) à 6 (samedi)6
SSuffixe anglais du jour : st, nd, rd ou th. À utiliser après jth
zJour de l'année, à partir de 072

Semaine et mois

CaractèreSignificationExemple
WNuméro de semaine ISO 8601 (les semaines commencent le lundi)11
FNom complet du moisMarch
MNom court du mois, 3 lettresMar
mNuméro du mois avec zéro initial (01 à 12)03
nNuméro du mois sans zéro initial (1 à 12)3
tNombre de jours dans le mois31

Année

CaractèreSignificationExemple
YAnnée complète, au moins 4 chiffres2026
yAnnée, 2 chiffres26
L1 si c'est une année bissextile, sinon 00
oAnnée de numérotation des semaines ISO 8601 (à utiliser avec W)2026
XAnnée complète étendue avec un signe (PHP 8.2+)+2026
xAnnée complète étendue, signe seulement si nécessaire (PHP 8.2+)2026

Heure

CaractèreSignificationExemple
HHeure sur 24 heures, zéro initial (00 à 23)09
GHeure sur 24 heures, sans zéro initial (0 à 23)9
hHeure sur 12 heures, zéro initial (01 à 12)09
gHeure sur 12 heures, sans zéro initial (1 à 12)9
iMinutes avec zéro initial (00 à 59)05
sSecondes avec zéro initial (00 à 59)07
aam ou pmam
AAM ou PMAM
vMillisecondes123
uMicrosecondes (toujours 000000 dans date(), qui prend des secondes entières)123456
BHeure Internet Swatch (000 à 999)420

Fuseau horaire

CaractèreSignificationExemple
eIdentifiant du fuseau horaireUTC
TAbréviation du fuseau horaireUTC
PDécalage par rapport à UTC avec deux-points+00:00
pComme P, mais Z pour UTCZ
ODécalage par rapport à UTC sans deux-points+0000
ZDécalage en secondes0
I (i majuscule)1 pendant l'heure d'été, sinon 00

Date et heure complètes

CaractèreSignificationExemple
cDate et heure ISO 86012026-03-14T09:05:07+00:00
rDate RFC 2822, utilisée dans les en-têtes d'emailSat, 14 Mar 2026 09:05:07 +0000
UTimestamp 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.

Illustration des langages de programmation de Coddy

Apprendre à coder avec Coddy

COMMENCER