Che cos’è Moment.js?

Moment.js è una libreria JavaScript ampiamente utilizzata per l'analisi, la validazione, la manipolazione e la formattazione delle date. Prima che emergessero le alternative moderne, Moment.js era lo standard de facto per la gestione delle date nelle applicazioni JavaScript. Fornisce un’API pulita e concatenabile che rende il lavoro con le date intuitivo e diretto. Sebbene esistano librerie più recenti come date-fns e Luxon, Moment.js rimane molto usato in codebase legacy ed è ancora attivamente mantenuto per correzioni di bug. Comprendere Moment.js è fondamentale per gli sviluppatori che lavorano su progetti esistenti che ne fanno uso.

Perché utilizzare una libreria per la manipolazione delle date?

L’oggetto nativo Date di JavaScript è notoriamente difficile da gestire. Presenta comportamenti incoerenti tra i browser, un indice dei mesi confuso (0‑11 anziché 1‑12), opzioni di formattazione limitate e nessun supporto integrato per i fusi orari. Le librerie per le date come Moment.js risolvono questi problemi fornendo un’API coerente e ben documentata. Gestiscono casi particolari come le transizioni dell’ora legale, gli anni bisestili e la formattazione specifica per locale in modo automatico, risparmiando agli sviluppatori la scrittura di logiche complesse e soggette a errori.

Descrizione dello strumento

Il Moment.js Playground è un ambiente interattivo basato sul browser per sperimentare con la libreria Moment.js. Scrivi ed esegui codice JavaScript direttamente nell’editor con pieno accesso a Moment.js e Moment Timezone. Il playground esegue automaticamente il tuo codice mentre digiti (con debounce) e visualizza tutto l’output della console in un pannello in stile terminale sotto. È perfetto per apprendere Moment.js, testare stringhe di formattazione delle date, fare debug di calcoli temporali e prototipare logiche legate al tempo senza configurare un ambiente di sviluppo.

Esempi

Formattare la data corrente:

const now = moment();
console.log(now.format("MMMM Do, YYYY"));
// Output: December 30th, 2025

console.log(now.format("dddd, h:mm A"));
// Output: Monday, 3:45 PM

Analizzare formati di data diversi:

const date1 = moment("2025-12-25", "YYYY-MM-DD");
const date2 = moment("25/12/2025", "DD/MM/YYYY");
const date3 = moment("Dec 25, 2025", "MMM D, YYYY");

console.log(date1.format("dddd")); // Thursday
console.log(date2.isValid()); // true
console.log(date3.month()); // 11 (0-indexed)

Calcolare il tempo relativo:

const past = moment().subtract(3, "days");
const future = moment().add(2, "weeks");

console.log(past.fromNow()); // 3 days ago
console.log(future.fromNow()); // in 14 days
console.log(past.from(future)); // 17 days ago

Aritmetica delle date:

const date = moment("2025-01-15");

const nextMonth = date.clone().add(1, "month");
const lastWeek = date.clone().subtract(1, "week");
const endOfMonth = date.clone().endOf("month");

console.log(nextMonth.format("YYYY-MM-DD")); // 2025-02-15
console.log(lastWeek.format("YYYY-MM-DD")); // 2025-01-08
console.log(endOfMonth.format("YYYY-MM-DD")); // 2025-01-31

Lavorare con le durate:

const start = moment("2025-01-01");
const end = moment("2025-12-31");

const duration = moment.duration(end.diff(start));

console.log(duration.asDays() + " days"); // 364 days
console.log(duration.asWeeks() + " weeks"); // 52 weeks
console.log(duration.humanize()); // a year

Confrontare le date:

const date1 = moment("2025-06-15");
const date2 = moment("2025-12-25");

console.log(date1.isBefore(date2)); // true
console.log(date1.isAfter(date2)); // false
console.log(date1.isSame(date2, "year")); // true
console.log(date1.isBetween("2025-01-01", "2025-08-01")); // true

Lavorare con i fusi orari:

const now = moment();

console.log(now.tz("America/New_York").format("h:mm A z"));
console.log(now.tz("Europe/London").format("h:mm A z"));
console.log(now.tz("Asia/Tokyo").format("h:mm A z"));

Funzionalità

  • Libreria Moment.js completa: Accesso a tutte le funzioni di Moment.js, inclusi parsing, formattazione, manipolazione e confronto
  • Supporto ai fusi orari: Moment Timezone è pre-caricato per lavorare con i fusi orari di tutto il mondo
  • Esecuzione di codice in tempo reale: Il codice viene eseguito automaticamente mentre digiti, grazie a un debounce intelligente
  • Terminale integrato: Visualizza l’output della console istantaneamente senza aprire gli strumenti di sviluppo del browser
  • Evidenziazione della sintassi: Evidenziazione della sintassi JavaScript per una migliore leggibilità del codice
  • Gestione degli errori: Gli errori di runtime vengono mostrati chiaramente nell’output del terminale

Casi d’uso

  • Apprendere Moment.js: Sperimenta con l’API e vedi i risultati immediatamente, senza configurare un progetto
  • Testare le stringhe di formattazione: Prova diversi token di formattazione per ottenere l’output di data esatto di cui hai bisogno
  • Debug di calcoli temporali: Testa aritmetiche di data complesse prima di implementarle nella tua applicazione
  • Conversioni di fuso orario: Converte rapidamente gli orari tra diversi fusi orari
  • Manutenzione di codice legacy: Prova snippet di codice Moment.js quando mantieni applicazioni esistenti

Token di formattazione comuni

Token Descrizione Esempio
YYYY Anno a 4 cifre 2025
YY Anno a 2 cifre 25
MM Mese a 2 cifre 01‑12
MMM Nome mese abbreviato Jan, Feb
MMMM Nome mese completo January
DD Giorno a 2 cifre 01‑31
Do Giorno con suffisso ordinale 1st, 2nd, 3rd
dddd Nome giorno della settimana completo Monday
ddd Nome giorno abbreviato Mon
HH Ora in formato 24 h 00‑23
hh Ora in formato 12 h 01‑12
mm Minuti 00‑59
ss Secondi 00‑59
A AM/PM (maiuscolo) AM, PM
a am/pm (minuscolo) am, pm
z Abbreviazione fuso orario EST, PST
Z Offset del fuso orario +05:00

Riferimento ai metodi comuni

Metodo Descrizione Esempio
moment() Crea il momento corrente moment()
format(string) Formatta in stringa moment().format("YYYY-MM-DD")
add(n, unit) Aggiunge tempo moment().add(7, "days")
subtract(n, unit) Sottrae tempo moment().subtract(1, "month")
startOf(unit) Inizio dell’unità moment().startOf("week")
endOf(unit) Fine dell’unità moment().endOf("month")
fromNow() Tempo relativo moment("2025-01-01").fromNow()
diff(moment) Differenza momentA.diff(momentB, "days")
isBefore(moment) È precedente momentA.isBefore(momentB)
isAfter(moment) È successivo momentA.isAfter(momentB)
isSame(moment, unit) È lo stesso momentA.isSame(momentB, "month")
isValid() Verifica validità moment("invalid").isValid()
clone() Crea una copia moment().clone()
tz(zone) Converte fuso orario moment().tz("America/New_York")

Unità di tempo

Moment.js supporta le seguenti unità di tempo per le operazioni add, subtract, startOf, endOf e diff:

  • years / y
  • quarters / Q
  • months / M
  • weeks / w
  • days / d
  • hours / h
  • minutes / m
  • seconds / s
  • milliseconds / ms