Oggetto Date in JavaScript
L'oggetto Date in JavaScript mi consente di gestire date e ore.
Grazie ai metodi e alle proprietà dell'oggetto Date, posso eseguire diverse operazioni, come estrarre la data e l'ora correnti, salvare date e ore personalizzate, effettuare calcoli e convertire le date in stringhe.
Creazione di un oggetto Date
Ci sono diversi modi per creare un oggetto "Date":
Ad esempio, posso dichiarare un nuovo oggetto tramite la funzione Date() senza inizializzarne il valore:
var myDate = new Date();
Una volta definito l'oggetto, gli assegno un valore usando i metodi setFullYear(), setMonth() e setDate().
myDate.setFullYear(2020); // Imposta l'anno a 2020
myDate.setMonth(0); // Imposta il mese a Gennaio (0 indica Gennaio)
myDate.setDate(31); // Imposta il giorno a 31
Nota. La numerazione dei mesi nell'oggetto Date comincia da zero. Pertanto, "0" corrisponde a gennaio, "1" a febbraio e via dicendo fino a "11" che rappresenta dicembra.
In alternativa, posso inizializzare l'oggetto Date assegnandogli un valore espresso in millisecondi:
var myDate = new Date(1678492135312);
Il valore tra parentesi rappresenta il numero di millisecondi dal 1 gennaio 1970 alle 00:00 GMT.
In questo caso, il valore 1678492135312 corrisponde al 23 marzo 2023.
var myDate = new Date(1678492135312);
document.write(myDate.toDateString());
Lo script restituisce in output
Sat Mar 11 2023
Una strada decisamente più semplice consiste nell'assegnare un valore indicando la data come stringa.
var myDate = new Date("31 January 2020");
oppure
var myDate = new Date("31 Jan 2020");
E' anche possibile assegnare la data in formato "mm gg aaaa". Tuttavia, non tutti i browser adottano questo formato.
var myDate = new Date("01 31 2020");
Un'altra strada per effettuare l'assegnazione consiste nel suddividere la data in una sequenza di parametri separati da virgole: anno, mese, giorno, ore, minuti, secondi e millisecondi:
var myDate = new Date(2020,0,31,15,35,20,20);
In questo caso, è però importante ricordarsi che la numerazione dei mesi inizia da zero anziché da uno.
Non occorre specificare tutti i parametri della data e dell'orario, è sufficiente fornire solo i valori necessari.
Ad esempio, per assegnare la data "31 Gennaio 2020" mi basta scrivere
var myDate5 = new Date(2020,0,31);
In questo caso, tutti gli altri parametri assumono il valore di default "0". Quindi, l'orario è automaticamente assegnato alla mezzanotte "00:00".
Nota. La numerazione dei mesi a partire da zero è poco naturale e in fase di analisi del codice è facile confondersi. Pertanto, per evitare confusione, nelle assegnazioni dei valori agli oggetti Date preferisco indicare il nome del mese per espresso. Laddove è possibile farlo.
Modificare ed estrarre le date
Per estrarre le informazioni da un oggetto Date, uso uno dei seguenti metodi "get"
- getDate()
restituisce il giorno del mese - getDay()
restituisce il giorno della settimana come intero (domenica=0, lunedì=1, ecc.) - getMonth()
restituisce il mese come intero (gennaio=0, febbraio=1, ecc.) - getFullYear()
restituisce l'anno come numero a quattro cifre - toDateString()
restituisce la data completa basata sul fuso orario locale come stringa leggibile (es. "Wed 31 Dec 2020") - getHours()
restituisce l'ora - getMinutes()
restituisce i minuti - getSeconds()
restituisce i secondi - getMilliseconds()
restituisce i millisecondi - toTimeString()
restituisce una stringa contenente l'orario (ad esempio, "15:23:07 UTC").
Ad esempio, se voglio leggere il mese di un oggetto data scrivo:
m = myDateObject.getMonth();
Per modificare i valori di un oggetto Date, invece, utilizzo i metodi "set"
- setDate()
imposta il giorno del mese - setMonth()
imposta il mese dell'anno (0=gennaio, 1=febbraio, ecc.) - setFullYear()
imposta l'anno come numero a quattro cifre - setHours()
imposta l'ora - setMinutes()
imposta i minuti - setSeconds()
imposta i secondi - setMilliseconds()
imposta i millisecondi
Ad esempio, per cambiare l'anno dell'oggetto a 2021 si scrive:
myDateObject.setFullYear(2009);
Se invece voglio cambiare la data e il mese al 27 marzo scrivo
myDateObject.setDate(27);
myDateObject.setMonth(2);
Vale la pena ricordare che la numerazione dei mesi comincia da zero, quindi il mese di marzo è il mese 2.
Come gestisce i valori non validi?
Se assegno un parametro temporale con un valore non valido, JavaScript calcola automaticamente il valore successivo.
Ad esempio, assegno il valore 10 alle ore e 67 ai minuti dell'orario.
var myDate = new Date();
myDate.setHours(10);
myDate.setMinutes(67);
document.write(myDate.toDateString());
In questo caso Javascript crea un oggetto impostando l'orario alle 11:07 ossia l'orario 67 minuti dopo le 10:00.
11:07:52 GMT+0200 (Ora legale dell’Europa centrale)
In pratica Javascript somma i valori in eccesso. Lo stesso criterio vale per i giorni e i mesi.
Questo criterio è molto utile perché mi permette di aggiungere o sottrarre dei valori ai giorni, ai mesi, alle, ore, ai minuti o ai secondi di una data o di un orario.
Ad esempio, realizzo questo script per assegnare una scadenza a 7 giorni a partire dalal data corrente.
var myVar = new Date();
var day = myVar.getDate();
document.write(myVar.toDateString());
myVar.setDate(day+ 7);
document.write(myVar.toDateString());
Lo script stampa prima la data corrente che, in questo caso, è il 3 maggio 2022
Wed May 03 2022
Poi aggiunge 7 giorni all'oggetto "myVar" e stampa la nuova data.
Wed May 10 2022
Dopo la modifica la nuova data è il 10 maggio 2022
I metodi UTC
Quando creo un oggetto Date, Javascript imposta la data e l'ora corrente locale.
In alternativa posso utilizzare metodi UCT (Universal Coordinated Time) anche conosciuto come GMT (Greenwich Mean Time) di Londra.
Cos'è l tempo universale coordinato (UTC)? Il Tempo Universale Coordinato (UTC) è il sistema di riferimento temporale utilizzato in tutto il mondo per regolare gli orologi e il tempo.Si basa su tempi atomici internazionali ed è valido in tutto il mondo. Le differenze di fuso orario sono generalmente espresse come "+/- un certo numero di ore/minuti da UTC. In pratica, quando si richiede una precisa sincronizzazione del tempo, viene scelto il sistema UTC come riferimento perché fornisce un punto di riferimento temporale comune a livello globale.
I metodi Set UTC
- setUTCDate()
Modifica il giorno in una data secondo il sistema UTC - setUTCFullYear()
Modifica l'anno in una data UTC - setUTCHours()
Modifica l'ora in una data/orario UTC - setUTCMilliseconds()
Modifica i millisecondi - setUTCMinutes()
Modifica i minuti. - setUTCMonth()
Modifica il mese. - setUTCSeconds()
Modifica i secondi
I metodi Set UTC
- getUTCFullYear()
Estrae l'anno da una data secondo UTC - getUTCHours()
Restituisce l'ora UTC di una data - getUTCMilliseconds()
Estrae i millisecondi secondo il formato UTC. - getUTCMinutes()
Estrae i minuti secondo il formato UTC - getUTCMonth()
Recupera il mese da una data in formato UTC - getUTCSeconds()
Recupera i secondi in formato UTC
E così via