Playground Date di JavaScript

Digita un'espressione Date di JavaScript ed esplora ogni formato di output e proprietà in tempo reale — toISOString, toString, getTime, getFullYear e altro.

L'oggetto Date di JavaScript

L'oggetto Date integrato di JavaScript memorizza il tempo internamente come numero di millisecondi dall'epoch Unix (1° gennaio 1970 00:00:00 UTC). Ogni istanza Date è in definitiva solo questo intero. I vari metodi — toISOString(), toString(), toLocaleString() — sono modi diversi di mostrare lo stesso valore di base.

Errori comuni con le date in JavaScript

Diversi comportamenti di Date traggono in inganno anche gli sviluppatori esperti:

  • I mesi partono da zero: gennaio è 0 e dicembre è 11; aggiungi sempre 1 quando li mostri
  • new Date('2024-01-01') è interpretato come mezzanotte UTC; new Date('2024/01/01') come mezzanotte locale
  • new Date(2024, 0, 1) crea il 1° gennaio 2024 in ora locale (il mese parte da 0)
  • Date.now() restituisce millisecondi; Math.floor(Date.now() / 1000) dà secondi Unix
  • Evita di aggiungere giorni sommando 86400000 ms: l'ora legale può farlo finire nell'orario sbagliato

Lavorare con i fusi orari in JavaScript

L'oggetto Date di JavaScript non ha una proprietà di fuso orario: è sempre memorizzato in UTC. Le conversioni di fuso avvengono in fase di visualizzazione, con l'API Intl.DateTimeFormat.

  • new Intl.DateTimeFormat('en-US', { timeZone: 'Asia/Tokyo', dateStyle: 'full', timeStyle: 'long' }).format(date)
  • date.toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })
  • new Intl.DateTimeFormat('en-CA', { timeZone: tz }).formatToParts(date) — restituisce le singole parti per una formattazione personalizzata

Come leggere l'output del playground

Il playground mostra diverse viste dello stesso valore Date per individuare in fretta errori di unità e di fuso. Confronta prima getTime con i secondi Unix, poi controlla le stringhe ISO e locale. Se la data ISO è corretta ma la stringa locale sembra diversa, il timestamp è giusto ed è cambiato solo il fuso di visualizzazione.

  • getTime è sempre in millisecondi dall'epoch Unix
  • I secondi Unix sono getTime diviso 1000 e arrotondato per difetto
  • toISOString mostra sempre l'UTC con una Z finale
  • toString e toLocaleString mostrano il fuso locale del browser, a meno che le opzioni non lo sovrascrivano