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. È possibile specificare anche valori negativi, nel qual caso indica il numero di millisecondi antecedenti la data di riferimento.
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
in quest'ultimo tipo di chiamata sono opzionali. Un'attenzione particolare bisogna prestarla all'argomento che indica il mese, dal momento che i corrispondenti valori numerici vanno da zero (gennaio) a 11 (dicembre).
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()
per 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:
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 |
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
avrà valore negativo o positivo a seconda se l'ora locale è rispettivamente maggiore o minore dell'ora UTC.
Rappresentare la data come stringa
Infine, una serie di metodi consentono la rappresentazione di una data sotto forma di stringa:
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 |