Menu

Formato data in PHP: tutti i caratteri di date()

Un formato data PHP è una stringa di lettere come 'Y-m-d H:i:s', dove Y è l'anno a 4 cifre, m il mese, d il giorno, H l'ora, i i minuti e s i secondi. Ecco ogni carattere di formato con un esempio, più l'escape, ISO 8601, le date giapponesi e la conversione da un formato a un altro.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Un formato data PHP è una stringa in cui le lettere rappresentano parti della data: date('Y-m-d H:i:s') stampa qualcosa come 2026-03-14 09:05:07. Y è l'anno a 4 cifre, m il mese, d il giorno, H l'ora (formato 24 ore), i i minuti e s i secondi; qualsiasi carattere che non è una lettera di formato, come -, / o :, viene stampato così com'è. Le stesse stringhe di formato funzionano in date() e in DateTimeImmutable::format().

Cambia $format e premi Run. La data è fissata a sabato 14 marzo 2026 alle 09:05:07, così puoi vedere esattamente cosa fa ogni lettera:

Output:

Sat, 14 Mar 2026 09:05
2026-03-14
14/03/2026
Saturday, March 14th, 2026
9:05 AM

date($format) formatta il momento attuale e date($format, $timestamp) un timestamp; $date->format($format) formatta un oggetto data. Tutto il resto sulle date, da strtotime() ai fusi orari, è nella pagina su date() in PHP.

Caratteri del formato data

Ogni esempio qui sotto è il risultato per 2026-03-14 09:05:07.123456 UTC.

Giorno

CarattereSignificatoEsempio
dGiorno del mese, 2 cifre con zero iniziale (da 01 a 31)14
jGiorno del mese senza zero iniziale (da 1 a 31)14
DNome breve del giorno, 3 lettereSat
l (L minuscola)Nome completo del giornoSaturday
NGiorno della settimana ISO, da 1 (lunedì) a 7 (domenica)6
wGiorno della settimana, da 0 (domenica) a 6 (sabato)6
SSuffisso inglese del giorno: st, nd, rd o th. Usalo dopo jth
zGiorno dell'anno, a partire da 072

Settimana e mese

CarattereSignificatoEsempio
WNumero della settimana ISO 8601 (le settimane iniziano di lunedì)11
FNome completo del meseMarch
MNome breve del mese, 3 lettereMar
mNumero del mese con zero iniziale (da 01 a 12)03
nNumero del mese senza zero iniziale (da 1 a 12)3
tNumero di giorni del mese31

Anno

CarattereSignificatoEsempio
YAnno completo, almeno 4 cifre2026
yAnno, 2 cifre26
L1 se è un anno bisestile, altrimenti 00
oAnno della numerazione settimanale ISO 8601 (usalo con W)2026
XAnno completo esteso con segno (PHP 8.2+)+2026
xAnno completo esteso, segno solo quando serve (PHP 8.2+)2026

Ora

CarattereSignificatoEsempio
HOra, formato 24 ore, zero iniziale (da 00 a 23)09
GOra, formato 24 ore, senza zero iniziale (da 0 a 23)9
hOra, formato 12 ore, zero iniziale (da 01 a 12)09
gOra, formato 12 ore, senza zero iniziale (da 1 a 12)9
iMinuti con zero iniziale (da 00 a 59)05
sSecondi con zero iniziale (da 00 a 59)07
aam o pmam
AAM o PMAM
vMillisecondi123
uMicrosecondi (sempre 000000 in date(), che usa secondi interi)123456
BSwatch Internet time (da 000 a 999)420

Fuso orario

CarattereSignificatoEsempio
eIdentificatore del fuso orarioUTC
TAbbreviazione del fuso orarioUTC
PScostamento da UTC con i due punti+00:00
pCome P, ma Z per UTCZ
OScostamento da UTC senza i due punti+0000
ZScostamento in secondi0
I (i maiuscola)1 durante l'ora legale, altrimenti 00

Data e ora complete

CarattereSignificatoEsempio
cData e ora ISO 86012026-03-14T09:05:07+00:00
rData RFC 2822, usata nelle intestazioni delle emailSat, 14 Mar 2026 09:05:07 +0000
UTimestamp Unix (secondi dal 1970-01-01 UTC)1773479107

La stessa tabella, dal vivo: questo blocco stampa ogni carattere per una data che scegli tu. Inserisci il tuo compleanno, una data di pomeriggio o una alla fine di un anno bisestile:

Stampare lettere e parole dentro un formato

Ogni lettera in una stringa di formato viene letta come carattere di formato, quindi 'Today is l' non stampa "Today is": T, o, d, a, y, i e s sono tutti caratteri di formato. Metti una barra rovesciata prima di ogni lettera che vuoi stampare così com'è. In una stringa tra virgolette doppie, \t è già un carattere di tabulazione, quindi usa gli apici singoli per i formati con barre rovesciate:

Output:

UTC202614am26 0507 Saturday
Today is Saturday
Saturday the 14th of March
2026-03-14T09:05:07
Saturday 	09UTC 14th

Formati di data comuni

La maggior parte del codice ha bisogno solo di una manciata di formati. Questo blocco li stampa come tabella HTML, quindi compaiono nella scheda Page:

Salva e confronta le date come Y-m-d o Y-m-d H:i:s: le stringhe in quell'ordine si ordinano allo stesso modo delle date, cosa che le stringhe d/m/Y non fanno.

ISO 8601, DATE_ATOM e altri formati standard

PHP ha costanti per i formati che si aspettano API, feed e cookie. DATE_ATOM (anche DateTimeInterface::ATOM) è ISO 8601 e RFC 3339, il formato usato dalle API JSON:

Output:

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

Esiste anche una costante DATE_ISO8601, ma il suo offset non ha i due punti (+0000), cosa che ISO 8601 non consente in quella forma; usa DATE_ATOM.

Formato della data giapponese (Y年m月d日)

I caratteri che non sono lettere di formato vengono stampati così come sono, compresi i kanji, quindi 'Y年n月j日' funziona come scritto. n e j tolgono lo zero iniziale (3月14日), m e d lo mantengono (03月14日). Il nome del giorno è l'unica parte che date() non sa tradurre, perché conosce solo i nomi inglesi; associa invece il numero w a una tua lista:

Output:

2026年3月14日
2026年03月14日 09時05分
2026年3月14日(土)
2026/03/14

Per una localizzazione completa, compresi i nomi dei mesi in altre lingue e l'era giapponese (令和), l'IntlDateFormatter dell'estensione intl formatta con i modelli del locale. Usa le lettere dei modelli ICU (yyyy, MM, EEEE), non i caratteri PHP di questa pagina:

<?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日

Convertire una data da un formato a un altro

Per trasformare 14/03/2026 in 2026-03-14, analizza la stringa con il formato in cui è scritta, usando DateTimeImmutable::createFromFormat(), poi formattala di nuovo. Usa gli stessi caratteri della tabella. Inizia il formato con !, altrimenti i campi che non hai fornito (qui l'ora) vengono presi dal momento attuale:

Output:

2026-03-14 00:00:00
March 14, 2026
bool(false)
2026-03-03
Array
(
    [10] => The parsed date was invalid
)

Per le date scritte dagli utenti, tratta qualsiasi warning di getLastErrors() come una data non valida, così come tratti false.

Errori comuni con i formati di data

Tre bug ricorrono spesso: m dove si intendeva i, Y contro y, e lasciare che strtotime() indovini l'ordine di giorno e mese. strtotime() legge le barre nell'ordine americano mese/giorno e i trattini o i punti nell'ordine giorno-mese, quindi le stesse cifre danno due date diverse:

Output:

09:03:07
09:05:07
14/03/26
2026-03-04
2026-04-03
bool(false)

Quando conosci il formato dell'input, dichiaralo con createFromFormat() invece di lasciare che strtotime() indovini.

Domande frequenti

Cosa significa date('Y-m-d') in PHP?

Ogni lettera viene sostituita da una parte della data: Y è l'anno a 4 cifre, m il mese con lo zero iniziale e d il giorno con lo zero iniziale, e i trattini vengono stampati così come sono. Il 14 marzo 2026 restituisce 2026-03-14.

Come converto una data da un formato a un altro in PHP?

Analizzala con il formato in cui è scritta, poi formattala con quello che vuoi: DateTimeImmutable::createFromFormat('!d/m/Y', '14/03/2026')->format('Y-m-d') restituisce 2026-03-14. createFromFormat() restituisce false quando la stringa non corrisponde, quindi verificalo prima.

Qual è la differenza tra m e i in un formato data PHP?

m è il mese (da 01 a 12) e i sono i minuti (da 00 a 59). Scrivere 'H:m' invece di 'H:i' è un bug comune: l'ora mostra il numero del mese dove dovrebbero esserci i minuti.

Come formatto una data in ISO 8601 in PHP?

Usa il carattere c o la costante DATE_ATOM: $date->format(DATE_ATOM) restituisce 2026-03-14T09:05:07+00:00. Evita DATE_ISO8601: il suo offset non ha i due punti (+0000), il che non è ISO 8601 valido.

Come mostro il giorno della settimana in giapponese con date() di PHP?

date() stampa solo nomi in inglese, quindi associa il numero w (0 per la domenica fino a 6 per il sabato) a una tua lista: ['日','月','火','水','木','金','土'][$date->format('w')]. Con l'estensione intl, IntlDateFormatter può formattare date intere in qualsiasi locale.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA