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
| Carattere | Significato | Esempio |
|---|---|---|
d | Giorno del mese, 2 cifre con zero iniziale (da 01 a 31) | 14 |
j | Giorno del mese senza zero iniziale (da 1 a 31) | 14 |
D | Nome breve del giorno, 3 lettere | Sat |
l (L minuscola) | Nome completo del giorno | Saturday |
N | Giorno della settimana ISO, da 1 (lunedì) a 7 (domenica) | 6 |
w | Giorno della settimana, da 0 (domenica) a 6 (sabato) | 6 |
S | Suffisso inglese del giorno: st, nd, rd o th. Usalo dopo j | th |
z | Giorno dell'anno, a partire da 0 | 72 |
Settimana e mese
| Carattere | Significato | Esempio |
|---|---|---|
W | Numero della settimana ISO 8601 (le settimane iniziano di lunedì) | 11 |
F | Nome completo del mese | March |
M | Nome breve del mese, 3 lettere | Mar |
m | Numero del mese con zero iniziale (da 01 a 12) | 03 |
n | Numero del mese senza zero iniziale (da 1 a 12) | 3 |
t | Numero di giorni del mese | 31 |
Anno
| Carattere | Significato | Esempio |
|---|---|---|
Y | Anno completo, almeno 4 cifre | 2026 |
y | Anno, 2 cifre | 26 |
L | 1 se è un anno bisestile, altrimenti 0 | 0 |
o | Anno della numerazione settimanale ISO 8601 (usalo con W) | 2026 |
X | Anno completo esteso con segno (PHP 8.2+) | +2026 |
x | Anno completo esteso, segno solo quando serve (PHP 8.2+) | 2026 |
Ora
| Carattere | Significato | Esempio |
|---|---|---|
H | Ora, formato 24 ore, zero iniziale (da 00 a 23) | 09 |
G | Ora, formato 24 ore, senza zero iniziale (da 0 a 23) | 9 |
h | Ora, formato 12 ore, zero iniziale (da 01 a 12) | 09 |
g | Ora, formato 12 ore, senza zero iniziale (da 1 a 12) | 9 |
i | Minuti con zero iniziale (da 00 a 59) | 05 |
s | Secondi con zero iniziale (da 00 a 59) | 07 |
a | am o pm | am |
A | AM o PM | AM |
v | Millisecondi | 123 |
u | Microsecondi (sempre 000000 in date(), che usa secondi interi) | 123456 |
B | Swatch Internet time (da 000 a 999) | 420 |
Fuso orario
| Carattere | Significato | Esempio |
|---|---|---|
e | Identificatore del fuso orario | UTC |
T | Abbreviazione del fuso orario | UTC |
P | Scostamento da UTC con i due punti | +00:00 |
p | Come P, ma Z per UTC | Z |
O | Scostamento da UTC senza i due punti | +0000 |
Z | Scostamento in secondi | 0 |
I (i maiuscola) | 1 durante l'ora legale, altrimenti 0 | 0 |
Data e ora complete
| Carattere | Significato | Esempio |
|---|---|---|
c | Data e ora ISO 8601 | 2026-03-14T09:05:07+00:00 |
r | Data RFC 2822, usata nelle intestazioni delle email | Sat, 14 Mar 2026 09:05:07 +0000 |
U | Timestamp 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.