Per la rappresentazione di date e orari JavaScript prevede l'oggetto Date. Esso codifica internamente una data come il numero di millisecondi trascorsi dal 1 Gennaio 1970, ora di Greenwich.
Il costruttore di Date
Possiamo utilizzare l'oggetto Date per la creazione di istanze di date in quattro modi differenti:
1. Non specifichiamo alcun parametro nel costruttore e otteniamo un oggetto Date
con il valore della data e ora corrente.
var w = new Date();
2. Passiamo un valore numerico che rappresenta il numero di millisecondi dal 1 Gennaio 1970
var x = new Date(1379989986515);
3. Specifichiamo una stringa che rappresenta una data:
var y = new Date("01/01/2013 15:30");
4. Indichiamo come argomenti rispettivamente l'anno, il mese, il giorno, l'ora, i minuti, i secondi e i millisecondi:
var z = new Date(2013, 1, 1, 15, 30, 0, 0);
A parte l'anno ed il mese, gli altri argomenti di Date
Scomporre la data in giorno, mese, anno, etc.
L'oggetto Date
prevede una serie di metodi che consentono di scomporre una data nei suoi componenti, come mostrato nella seguente tabella:
MEtodo | Descrizione |
---|---|
getFullYear | Restituisce l'anno rappresentato con quattro cifre |
getMonth | Restituisce il mese (da 0 a 11) |
getDate | Restituisce il giorno del mese (da 1 a 31) |
getDay | Restituisce il giorno della settimana (da 0 a 6) |
getHours | Restituisce l'ora |
getMinutes | Restituisce i minuti |
getSeconds | Restituisce i secondi |
getMilliseconds | Restituisce i millisecondi |
Vediamo un esempio d'uso del metodo getDay()
ricavare il giorno della settimana
var oggi = new Date();
var giorno;
switch (oggi.getDay()) {
case 0:
giorno = "domenica";
break;
case 1:
giorno = "lunedì";
break;
case 2:
giorno = "martedì";
break;
case 3:
giorno = "mercoledì";
break;
case 4:
giorno = "giovedì";
break;
case 5:
giorno = "venerdì";
break;
case 6:
giorno = "sabato";
break;
}
console.log("Oggi è " + giorno);
Ecco lo stesso esempio in un versione compatta, che sfrutta un array simile a quello definito qualche lezione addietro:
var oggi = new Date(),
giorno = ["domenica", "lunedì", "martedì", "mercoledì","giovedì", "venerdì","sabato"];
console.log("Oggi è " + giorno[oggi.getDay()]);
e una ultracompatta, per arrovellarsi un po' il cervello:
var giorno = ["domenica", "lunedì", "martedì", "mercoledì",
"giovedì", "venerdì","sabato"][new Date().getDay()];
console.log("Oggi è " + giorno);
Modificare la data
È possibile modificare il valore di una data utilizzando i metodi elencati nella seguente tabella:
Ad esempio, per impostare il giorno del prossimo anno corrispondente ad oggi possiamo scrivere:
var data = new Date();
data.setFullYear(data.getFullYear() + 1);
console.log(data);
Notiamo che la modifica di una data aggiungendo o sottraendo valori, ad esempio mesi, giorni o ore, comporta la gestione automatica degli altri componenti della data. Così, ad esempio, se si aggiungono 10 giorni al giorno di Natale si otterrà automaticamente la modifica del mese e dell'anno:
var data = new Date(2013, 11, 25);
data.setDate(data.getDate() + 10);
console.log(data); // Sat Jan 04 2014 ...
Confrontare le date
JavaScript prevede la possibilità di confrontare due date tramite i normali operatori di confronto, come mostrato nel seguente esempio:
var scadenza = new Date(2013, 11, 10);
var oggi = new Date();
if (oggi < scadenza) messaggio = "Non ancora scaduto!";
if (oggi > scadenza) messaggio = "Scaduto!";
console.log(messaggio);
Impostazioni locali
Normalmente le date sono indicate in base alle impostazioni locali della macchina su cui viene eseguito uno script. Quindi se stampiamo a video una data possiamo ottenere qualcosa di analogo a questo:
Tue Oct 22 2013 07:20:20 GMT+0200 (ora legale Europa occidentale)
Internamente però la rappresentazione delle date è relativa all'ora di Greenwich (Greenwich Mean Time
o GMT) conosciuta anche come Universal Time Coordinate
(UTC). JavaScript mette a disposizione alcuni metodi per poter lavorare con la rappresentazione UTC delle date. Ad esempio, il seguente codice ricava l'ora di Greenwich della data corrente:
var oggi = new Date();
console.log(oggi.getUTCHours());
In pratica, per ciascuno dei metodi per ottenere e per impostare i componenti di una data esiste il corrispondente metodo UTC: getUTCDate(), setUTCDate(), ecc.
In più abbiamo il metodo getTimezoneOffset() che restituisce la differenza in minuti tra l'ora UTC e l'ora locale:
var oggi = new Date()
var differenza = oggi.getTimezoneOffset();
La variabile differenza
Rappresentare la data come stringa
Infine, una serie di metodi consentono la rappresentazione di una data sotto forma di stringa:
Metodo | Descrizione |
---|---|
setFullYear | Imposta l'anno di una data |
setMonth | Imposta il mese di una data |
setDate | Imposta il giorno del mese di unadata |
setHours | Imposta l'ora di una data |
setMinutes | Imposta i minuti di una data |
setSeconds | Imposta i secondi di una data |
setMilliseconds | Imposta i millisecondi di una data |
setTime | Imposta data e ora specificandolain millisecondi rispetto al 1 Gennaio 1970 |
Metodo | Descrizione |
---|---|
toDateString | Converte la componente data in stringa, escludendo l'ora |
toISOString | Converte una data in stringa in formato ISO |
toLocaleDateString | Converte la componente data in stringa, escludendo l'ora, secondo le impostazioni locali |
toLocaleTimeString | Converte la componente ora in stringa, escludendo la data, secondo le impostazioni locali |
toLocaleString | Converte una data in stringa secondo le impostazioni locali |
toString | Converte una data in stringa |
toTimeString | Converte la componente ora in stringa, escludendo la data |
toUTCString | Converte una data UTC in stringa |