Formatta le date in JavaScript senza librerie: un builder Intl.DateTimeFormat dal vivo, codice per YYYY-MM-DD e MM/DD/YYYY, fusi orari, tempo relativo, intervalli e le trappole del parsing dietro i bug del giorno sbagliato.
Per formattare una data in JavaScript, usa Intl.DateTimeFormat o toLocaleDateString con una locale e delle opzioni, per esempio date.toLocaleDateString("en-US", { dateStyle: "long" }) per March 5, 2026. Usa toISOString() per le API, l'opzione timeZone per mostrare un altro fuso orario e Intl.RelativeTimeFormat per frasi come 3 giorni fa.
Risposte rapide
Scegli una locale e le opzioni nel builder e copia il codice che genera; l'anteprima è formattata dal tuo stesso browser. Sotto trovi una tabella dei formati di tutti i giorni ed esempi eseguibili per fusi orari, tempo relativo e intervalli.
Usa l'anno locale, il mese più uno e il giorno, completati con padStart(2, "0"), e uniscili con dei trattini. Anche toISOString().slice(0, 10) dà quella forma, ma in UTC, quindi vicino alla mezzanotte può mostrare il giorno sbagliato.
new Date("2026-03-05") viene letto come mezzanotte UTC. A ovest di Greenwich, quel momento in ora locale è ancora il giorno 4. Fai il parsing con un orario ("2026-03-05T00:00") oppure con new Date(2026, 2, 5) per ottenere la mezzanotte locale.
Non per formattare. Intl copre locale, fusi orari e tempo relativo in ogni browser moderno. Gli stessi maintainer di Moment lo descrivono come un progetto legacy; per i calcoli sulle date funziona bene una piccola libreria come date-fns o la più recente API Temporal (dove disponibile).
Passa timeZone con un nome IANA, per esempio { timeZone: "America/New_York", timeStyle: "short" }. L'oggetto Date rimane lo stesso istante; cambia solo il modo in cui viene scritto.
Formati comuni e il codice per ciascuno
Una stringa ISO con la sola data viene letta come mezzanotte UTC, mentre una stringa data e ora senza offset viene letta come ora locale. Questa differenza causa la maggior parte dei bug del giorno sbagliato.
Costruiscila dalle parti locali con padStart. Il trucco della locale en-CA dà lo stesso risultato ma dipende dal fatto che il formato di quella locale non cambi.
timeZone accetta un nome IANA. Il Date in sé non ha un fuso; cambia solo la formattazione. Nota che timeZoneName non si può combinare con dateStyle o timeStyle.
Intl.RelativeTimeFormat scrive le parole; tu scegli l'unità. Questa funzione di supporto sceglie l'unità più grande che ci sta.
formatRange rimuove le parti ripetute, così una prenotazione dal 5 al 9 dello stesso mese si legge in modo naturale.
Quando nessuno stile predefinito va bene, prendi i pezzi localizzati e disponili tu, per esempio per mostrare il giorno più grande del mese.
Lavori con i secondi epoch? Usa il
Opzioni di Intl.DateTimeFormat usate nel builder
(nessuno)
(il tuo fuso)
Errore: {msg}
Data e ora
Locale
Fuso orario
Modalità
Stili predefiniti
Scegli ogni parte
Copia il codice
Inizia gratis · Nessuna carta di credito richiesta