L'objecte Date¶
Serveix per treballar amb dates i hores.
Per treballar amb l'objecte Date
cal crear-ne una instància amb new
indicant la data que volem representar.
Si ometem els paràmetres ens retorna la data actual del sistema.
Podem representar qualsevol altra data utilitzant el format:
any, indexMes, dia, hora, minut, segon, mil·lisegon
Tingueu en compte que...
Només l'any i el mes són obligatoris:
new Date(any, indexMes)
new Date(any, indexMes, dia)
new Date(any, indexMes, dia, hora)
new Date(any, indexMes, dia, hora, minut)
new Date(any, indexMes, dia, hora, minut, segon)
new Date(any, indexMes, dia, hora, minut, segon, mil·lisegon)
Els camps omesos es consideren com: dia 1 del mes i hora 00:00:00.000
Important!
Els mesos es numeren amb un índex a partir de 0 (gener) i fins a 11 (desembre)
Cal tenir present que hem de posar un número menys del que normalment correspondria al calendari
new Date(); // Data i hora actuals
new Date(2010, 4); // 01/05/2010 a les 00:00:00
new Date(2024, 11, 25); // Dia de Nadal a les 00:00:00
new Date(2024, 0, 15, 23, 30); // 15/01/2024 a les 23:30:00
Podem posar una data fora de rang i es calcularà amb la data equivalent corresponent:
new Date(2024, 9, 0); // 30/09/2024 (darrer dia del mes anterior)
new Date(2024, 13, 5); // 5/02/2025 (13 = febrer de l'any següent)
new Date(2024, 0, 0); // 31/12/2023 (darrer dia del 2023)
new Date(2024, -2, 10); // 10/11/2023 (2 mesos enrere respecte a l'any)
Tingueu en compte que...
Els objectes de tipus Date són sempre estàtics, per tant un cop creats mantenen el valor de data i hora, i no s'actualitzen sols amb el pas del temps.
Date (MDN)
JavaScript Date Objects (W3Schools)
JavaScript Date Reference (W3Schools)
Mètodes per llegir dates i hores¶
Consulten valors temporals, tots comencen amb el prefix get.
Dia, mes i any¶
getDate()
retorna el valor numèric del dia del mes, entre 1 i 31getMonth()
retorna el valor numèric del mes, entre 0 (gener) i 11 (desembre)getFullYear()
retorna el valor numèric de l'any actual amb 4 dígits
let d = new Date(); // Data d'avui
let dia = d.getDate();
let mes = d.getMonth() + 1;
let any = d.getFullYear();
let data = `${dia} / ${mes} / ${any}`;
data =
Dia de la setmana¶
Amb el mètode getDay()
obtenim el valor numèric del dia de la setmana entre 0 i 6, tenint en compte que es considera que la setmana comença en diumenge i per tant el dia 0 és diumenge i el 6 dissabte.
valor de getDay() | dia de la setmana |
---|---|
0 | Diumenge |
1 | Dilluns |
2 | Dimarts |
3 | Dimecres |
4 | Dijous |
5 | Divendres |
6 | Dissabte |
let d = new Date(); // Data d'avui
diaSetmana = d.getDay();
diaSetmana =
Normalment voldrem fer alguna conversió a cadena per obtenir el nom del dia, per exemple:
const diesSetmana = [
"Diumenge",
"Dilluns",
"Dimarts",
"Dimecres",
"Dijous",
"Divendres",
"Dissabte" ];
let d = new Date(); // Data d'avui
dia = diesSetmana[ d.getDay() ];
diaSetmana =
Hora, minut, segon i mil·lisegons¶
Obtenim cada part de l'hora com un valor numèric amb
getHours()
getMinutes()
getSeconds()
getMilliseconds()
let d = new Date(); // Data d'avui
let h = d.getHours();
let m = d.getMinutes();
let s = d.getSeconds();
let hora = `${h}:${m}:${s}`;
hora =
Data en referència a EPOCH¶
El mètode getTime()
ens retorna el nombre de mil·lisegons transcorreguts des del temps de referència conegut com a EPOCH, que correspon a les 00:00:00 del dia 1 de gener de 1970.
Temps actual respecte a EPOCH =
let d = new Date(); // Data d'avui
tempsEpoch = d.getTime();
Unix time (Wikipedia)
Epoch & Unix Timestamp Conversion Tools
Mètodes per calcular dates i hores¶
Estableixen valors temporals, tots comences amb el prefix set.
Establir una data¶
Podem modificar qualsevol valor de la data obtinguda en instanciar un objecte Date
i la resta de valors s'actualitzaran.
Tots els mètodes són anàlogs als existents per consultar una data, però canviant el prefix get per set.
Important!
Les modificacions que fem quan establim nous valors a una data només afecten a la variable que conté la instància de Date
que hem creat.
NO afecten per res al rellotge del sistema!
Exemple: calcular en quin dia de la setmana cau Nadal¶
let d = new Date(); // Data d'avui
d.setDate(25); // Canviem el dia a 25
d.setMonth(11); // Canviem el mes a 11 (desembre)
diaNadal = d.getDay(); // Valor numèric
diaNadal = diesSetmana[ d.getDay() ]; // Nom del dia
Aquest any Nadal cau en
Exemple: sumar dies a una data¶
let d = new Date(); // Data d'avui
let dia = d.getDate(); // Obtenim el dia del mes
d.setDate(dia + 75); // Sumem dies a la data
let nouDia = d.getDate()
let nouMes = d.getMonth() + 1
D'aquí a exactament 75 dies serà el dia
Altres càlculs amb dates
Amb el mateix procediment podem sumar o bé restar tant dies com mesos, anys, hores, minuts, etc.
L'objecte Date
s'encarrega de calcular la data i hora correctes automàticament, tenint en compte els canvis de mes o any, si hi ha anys de traspàs, etc.
Exemple: calcular la diferència entre dues dates¶
let dataAvui = new Date();
let dataNadal = new Date(dataAvui.getFullYear(), 11, 25);
let diesNadal = Math.floor( (dataNadal - dataAvui) / (24 * 60 * 60 * 1000) );
Falten dies perquè sigui Nadal
Operacions entre dates
Podem fer aquestes operacions i d'altres com comparar dates perquè Date
opera sobre les dates amb el valor en referència a EPOCH, per tant internament està restant dos nombres enters.