`Oggetto` Date`
Questo articolo spiega l'oggetto Date.
Spiegheremo l'oggetto Date passo dopo passo, dai meccanismi di base alle operazioni più comunemente usate nel lavoro pratico, con esempi concreti.
YouTube Video
Oggetto Date`
Cos'è l'oggetto Date?
L'oggetto Date di JavaScript è un oggetto standard per la gestione di date e orari. Internamente, gestisce la data e l'ora in base al numero di millisecondi trascorsi dal 1 gennaio 1970, 00:00:00 UTC.
Per prima cosa, creiamo un oggetto Date che rappresenta la data e l'ora attuali e controlliamo il suo contenuto.
1const now = new Date();
2console.log(now);- Questo codice crea un oggetto
Dateche rappresenta la data e l'ora attuale al momento dell'esecuzione. Il formato di visualizzazione dipende dall'ambiente di esecuzione, come il browser o il sistema operativo.
Come creare un oggetto Date
Gli oggetti Date possono essere creati in diversi modi a seconda delle esigenze. Un punto particolarmente importante e facile da sbagliare è che l'argomento del costruttore per il mese parte da zero, cioè i mesi iniziano da 0.
1const d1 = new Date(); // Current date and time
2const d2 = new Date("2025-01-01"); // Create from an ISO date string
3const d3 = new Date(2025, 0, 1); // January 1, 2025 (month is zero-based)
4const d4 = new Date(2025, 0, 1, 10, 30); // January 1, 2025, 10:30
5
6console.log(d1, d2, d3, d4);- In
new Date(anno, mese, giorno), ilmesesignifica che0è gennaio e11è dicembre. Se non si comprende questa specifica, si potrebbe creare accidentalmente una data con uno scarto di un mese, quindi bisogna sempre fare attenzione.
Recuperare ogni elemento della data e dell'ora
È possibile recuperare singolarmente anno, mese, giorno, orario e giorno della settimana da un oggetto Date. Tutti i metodi getter restituiscono valori numerici.
1const date = new Date();
2
3console.log(date.getFullYear()); // Year
4console.log(date.getMonth()); // Month (0-based: 0 = January)
5console.log(date.getDate()); // Day of the month
6console.log(date.getHours()); // Hours
7console.log(date.getMinutes()); // Minutes
8console.log(date.getSeconds()); // Seconds
9console.log(date.getDay()); // Day of the week (0 = Sunday, 6 = Saturday)
- Come nella creazione, fai attenzione che anche
getMonth()parte da zero. Quando si utilizza per la visualizzazione, è comune aggiungere 1 per regolare il valore. getDay()restituisce il giorno della settimana come numero. 0 rappresenta la domenica e 6 rappresenta il sabato.
Modificare date e orari
L'oggetto Date è mutabile, il che significa che puoi modificarne i valori successivamente. Questa caratteristica è utile, ma bisogna fare attenzione agli effetti collaterali indesiderati.
È possibile utilizzare i metodi set per modificare i valori di un oggetto Date esistente.
1const date = new Date("2025-01-01");
2
3date.setFullYear(2026);
4date.setMonth(5); // June
5date.setDate(15);
6
7console.log(date);- Anche
setMonth()parte da zero. L'oggetto originale viene modificato direttamente.
Aggiungere e sottrarre date
È comune effettuare calcoli sulle date usando i millisecondi o tramite setDate(). Per i calcoli basati sui giorni, utilizzare setDate() è particolarmente intuitivo e sicuro.
1const date = new Date("2025-01-01");
2
3date.setDate(date.getDate() + 7);
4console.log(date);- In questo esempio, stiamo calcolando la data 7 giorni dopo quella specificata. Anche se l'aggiunta attraversa un nuovo mese, viene regolata automaticamente.
Confrontare oggetti Date
Gli oggetti Date possono essere confrontati come numeri. Questo perché viene confrontato il valore interno in millisecondi.
1const a = new Date("2025-01-01");
2const b = new Date("2025-01-10");
3
4console.log(a < b); // true
5console.log(a > b); // false
- Se vuoi determinare l'ordine delle date, non è necessaria alcuna conversione aggiuntiva. Puoi usare direttamente gli operatori di confronto.
Lavorare con i timestamp (millisecondi)
L'oggetto Date può essere convertito da e verso numeri che rappresentano millisecondi (timestamp). Questo formato è utilizzato frequentemente in API o nelle integrazioni con database.
1const now = Date.now();
2console.log(now);
3
4const date = new Date(now);
5console.log(date);Date.now()restituisce l'ora corrente in millisecondi. È molto utile quando si desidera memorizzare o confrontare il valore come numero.
Formattare le date come stringhe
Mostrare un oggetto Date così com'è spesso genera un formato che potrebbe non essere adatto alle tue esigenze. Pertanto, dovresti formattarla esplicitamente secondo le tue esigenze.
1const date = new Date("2025-01-01");
2
3const formatted = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
4console.log(formatted);- Formattandola manualmente in questo modo, puoi controllare completamente il formato di visualizzazione. Nel lavoro pratico, spesso si usano delle librerie a questo scopo.
Differenza tra ora UTC e ora locale
Date fornisce metodi per gestire sia l'ora locale che l'UTC. È importante comprendere correttamente questa differenza per le integrazioni con server e la compatibilità internazionale.
1const date = new Date();
2
3console.log(date.getHours()); // Local time (hours)
4console.log(date.getUTCHours()); // UTC time (hours)
- I metodi
getUTC*restituiscono sempre valori basati su UTC. Fai particolare attenzione quando elabori dati su diversi fusi orari.
Precauzioni nell'uso degli oggetti Date
Date è comodo, ma ha anche alcuni aspetti insidiosi. In particolare, il mese che parte da zero e la sua mutabilità sono cause comuni di bug.
Vediamo esempi specifici qui sotto per osservare gli effetti del fatto che Date è mutabile.
1const original = new Date("2025-01-01");
2const copy = new Date(original);
3
4copy.setDate(10);
5
6console.log(original);
7console.log(copy);- Se vuoi mantenere la data e l'ora originali, crea sempre una copia. Essere consapevole di questo punto ti aiuterà a evitare bug indesiderati.
Motivi per cui Date è difficile da gestire e criteri per l'utilizzo delle librerie.
L'oggetto Date offre funzionalità sufficienti come funzione standard, ma in pratica ci sono situazioni in cui può essere difficile da usare. Le problematiche tipiche includono mesi e giorni della settimana indicizzati da zero, la tendenza a confondere l'ora locale con l'UTC e il fatto che l'oggetto sia mutabile. Questi problemi possono portare a un aumento dei bug man mano che cresce l'elaborazione delle date.
Date è sufficiente per il recupero e il confronto semplice delle date, ma la leggibilità e la manutenibilità del codice tendono a diminuire con calcoli di date più complessi o formattazioni di visualizzazione.
Se hai requisiti come i seguenti, potresti considerare l'uso di librerie leggere per le date come dayjs o date-fns.
- Hai bisogno di gestire esplicitamente i fusi orari.
- Devi spesso effettuare calcoli sulle date o sugli intervalli.
- Vuoi modificare in modo flessibile il formato di visualizzazione.
- Vuoi gestire date e orari in modo immutabile.
Riepilogo
Gli oggetti Date sono lo strumento più fondamentale per gestire date e orari in JavaScript. Comprendendone le particolarità e svolgendo correttamente creazione, recupero, calcoli e formattazione, potrai usarlo in sicurezza anche nel lavoro reale.
Dopo aver padroneggiato le basi, utilizzare librerie per le date quando necessario è una scelta pratica.
Puoi seguire l'articolo sopra utilizzando Visual Studio Code sul nostro canale YouTube. Controlla anche il nostro canale YouTube.