Javascript, grazie allโoggetto Date() offre una serie di potenti e preziosi strumenti per manipolare date e orari.In questa lezione della nostra guida a Javascript vedremo come manipolare le date attraverso lโoggeto nativo Date() ed anche attraverso alcune librerie appositamente pensate per semplificare la manipolazione di date e orari allโinterno di applicativi basati su Javascript.
Indice
Premessa: recuperare e manipolare la data del client
Prima di addentrarci nellโanalisi dei vari metodi supportati dallโoggetto Date() รจ bene ricordare che attraverso Javascript รจ possibile lavorare facendo riferimento alla data e orario settati sul browser dellโutente. Non รจ possibile, invece, utilizzare come riferimento temporale la data e lโora settata sul nostro server web. Il perchรจ di questa caratteristica รจ di semplice comprensione: Javascript รจ un linguaggio lato-client รจ pertanto il suo ambito di esecuzione corrisponde al browser dellโutente e non al web server (salvo che venga utilizzato lato server come accade con Node.js).
Utilizzare lโoggetto Date()
Per utilizzare lโoggetto Date() รจ, prima di tutto, necessario creare una variabile a cui assegnare lโoggetto attraverso lโapposito costruttore:
var miadata = new Date();
Tutti i metodi dellโoggetto saranno ora associati alla variabile al cui interno abbiamo istanziato, appunto, lโoggetto Date().
I metodi dellโoggetto Date()
Lโoggetto Date() รจ davvero molto ricco di metodi per la manipolazione di date e orari, in questa sede crercheremo di analizzare i principali, ovvero:
Metodi GET
I metodi della famiglia โgetโ sono quelli utilizzati per recuperare un dato valore relativo ad una data o ad un orario, i piรน usati sono:
- getDate() โ restituisce il numero del giorno corrente nel mese (1 -31);
- getDay() โ restituisce il numero del giorno corrente nella settimana (0 = domenica; 1 = lunedรฌ; 2 = martedรฌ; ecc.);
- getMonth() โ restituisce il numero del mese corrente (0 = gennaio; 1 = febbraio; 2 = marzo; ecc.);
- getFullYear() โ restituisce lโanno corrente;
- getHours() โ restituisce lโora corrente (0 โ 23);
- getMinutes() โ restituisce il minuto corrente (0 โ 59);
- getSeconds() โ restituisce il secondo corrente (0 โ 59);
- getTime() โ restituisce il valore corrente del timestamp;
Vediamo un esempio:
var miadata = new Date();
var gg = miadata.getDate();
var mm = miadata.getMonth();
var yyyy = miadata.getFullYear();
document.write(gg + '/' + (mm+1) + '/' + yyyy);
Metodi SET
I metodi della famiglia โsetโ sono quelli utilizzati per modificare (nel nostro script) uno o piรน valori relativi alla data o allโorario impostati nel browser, i piรน usati sono:
- setDate() โ imposta arbitrariamente il numero del giorno corrente nel mese;
- setDay() โ imposta arbitrariamente il numero del giorno corrente nella settimana;
- setMonth() โ imposta arbitrariamente il numero del mese corrente;
- setFullYear() โ imposta arbitrariamente lโanno corrente;
- setHours() โ imposta arbitrariamente lโora corrente;
- setMinutes() โ imposta arbitrariamente il minuto corrente;
- setSeconds() โ imposta arbitrariamente il secondo corrente;
Vediamo un esempio di come settare, ai fini del nostro script, una data arbitraria:
var miadata = new Date();
// imposto arbitrariamente il giorno corrente al 25 del mese...
miadata.setDate(20);
// ...il mese a dicembre... Buon Natale ๐
miadata.setMonth(11);
/*
Ora svolgo una serie di operazioni sulle date
avendo come riferimento la data impostata arbitrariamente
/*
Metodi di conversione
Si tratta di una serie di metodi utilizzati per convertire un oggetto data in qualcosโaltro. I piรน noti sono:
- toISOString() โ converte lโoggetto data in una stringa di testo utiizzando lo standard ISO per la definizione delle date;
- toLocaleDateString() โ converte lโoggetto data in una stringa di testo contenente la sola data (non verrร compreso lโorario) utilizzando le impostazioni locali del vostro browser (in poche parole vdrete una data scritta in italiano, se questa รจ la vostra lingua ovviamente);
- toLocaleString() โ converte lโoggetto data in una stringa di testo con data e orario utilizzando le impostazioni locali del vostro browser;
- toString() โ converte lโoggetto data in una stringa di testo;
Altri metodi dellโoggetto Date()
Oltre a quelli citati, lโoggetto date() dispone di altri metodi che non rientrano nelle categorie viste sopra; il piรน importante di questi รจ sicuramente parse() il quale converte una stringa contenente una data in un valore di timestamp.
Il metodo parse() non necessitร che lโoggetto Date() venga istanziato in una variabile:
var ts = Date.parse('11 November, 2014');
Utilizzare librerie ad hoc per la gestione delle date con Javascript
La gestione delle date, come forse avrete intuito arrivati al termine di questa lezione, รจ probabilmente uno dei compiti piรน noiosi per chi deve realizzare uno script basato su JavaScript, non nego che tali procedure possano entusiasmare lo sviluppatore nei casi in cui si debbano creare applicazioni particolarmente complesse ma, sfide a parte, avendo a disposizione un libreria in grado di svolgere velocemente procedure di parsing, manipolazione e formattazione delle date, digitare il nostro codice diventerร sicuramente piรน semplice e veloce.
XDate
Tra le numerose soluzioni disponibili in Rete a questo scopo voglio segnalare XDate, una library JS standalone (ebbene si, niente jQuery questa volta!) che ha innanzitutto la vantaggiosa caratteristica di pesare appena 3 Kb se sotto forma di archivio compresso (con algoritmo GZip); tra le funzionalitร messe a disposizione da XDate ve ne sono alcune che potranno essere sfruttate frequentemente, come per esempio:
- il calcolo delle differenze tra date;
- la possibilitร di visualizzare gli output prodotti in diversi formati;
- la manipolazione dei valori UTC (tempo coordinato universale);
- la possibilitร di includere la libreria in applicazioni di terze parti.
XDate รจ un progetto gratuito ed รจ utilizzabile liberamente. La libreria รจ scaricabile da Github oppure dal sito ufficiale del progetto dove รจ disponibile anche una buona documentazione circa il suo utilizzo.
Moment.js
Se avete necessitร di una soluzione semplice ed efficente per la gestione delle date, vi suggerisco di mettere alla prova Moments.js; si tratta di una libreria basata sul linguaggio JavaScript che mette a disposizione numerose funzionalitร utili per la lettura, la manipolazione e la formattazione di date e orari. Per scaricarla, โpesaโ soltanto 18 Kb in versione Full Source, sarร possibile recarsi sul sito ufficiale del progetto o clonarne il repository tramite Git:
Moment.js potrร essere utilizzato tramite browser cosi come allโinterno di un ambiente server event-driven basato su Node.JS; sono disponibili numerosi metodi per la restituzione delle date in differenti formati e per effettuare calcoli come per esempio gli intervalli di tempo, ad esempio:
var halloween = moment([2019, 10, 31]);
console.log(halloween.fromNow());
Permetterร di calcolare il numero di giorni passati dal 31 ottobre 2019 ad oggi; รจ inoltre supportata la gestione dei Timestamp:
var day = moment(1318781876406);
Moment.js supporta il multilinguaggio, eventuali lingue mancanti potranno essere aggiunte editando un apposito file JavaScript.