Lad os se på et andet indbygget objekt: Date. Det gemmer datoen, tiden og giver metoder til håndtering af dato/tid.
For eksempel kan vi bruge det til at gemme oprettelses-/ændringstider, måle tid eller blot udskrive den nuværende dato.
Oprettelse
For at oprette et nyt Date objekt kalder vi new Date() med en af følgende argumenter:
new Date()-
uden argumenter – opretter et
Dateobjekt med nuværende dato og tid:let now = new Date(); alert( now ); // viser nuværende dato/tid new Date(millisekunder)-
Opretter et
Dateobjekt med tiden lig med antallet af millisekunder (1/1000 af en sekund) der er gået efter 1. januar 1970 UTC+0.// 0 betyder 01.01.1970 UTC+0 let Jan01_1970 = new Date(0); alert( Jan01_1970 ); // tilføjer 24 timer, giver 02.01.1970 UTC+0 let Jan02_1970 = new Date(24 * 3600 * 1000); alert( Jan02_1970 );Et heltal der repræsenterer antallet af millisekunder der er gået siden 1. januar 1970 UTC+0 kaldes en timestamp (tidsstempel).
Det er en simpel numerisk repræsentation af en dato som heltal. Vi kan altid oprette en dato fra et timestamp ved hjælp af
new Date(timestamp)og konvertere et eksisterendeDateobjekt til et timestamp ved hjælp af metodendate.getTime()(se nedenfor).Datoer før 01.01.1970 har negative timestamps, e.g.:
// 31 Dec 1969 let Dec31_1969 = new Date(-24 * 3600 * 1000); alert( Dec31_1969 ); new Date(datestring)-
Hvis der sendes et enkelt argument og det er en streng, så bliver den automatisk fortolket. Algoritmen er den samme som
Date.parsebruger – den ser vi på senere.let date = new Date("2017-01-26"); alert(date); // Tiden er ikke defineret, så det antages at være midnat GMT og // justeres i forhold til tidszonen hvor koden køres // Så resultatet kan være // Thu Jan 26 2017 11:00:00 GMT+1100 (Australian Eastern Daylight Time) // eller // Wed Jan 25 2017 16:00:00 GMT-0800 (Pacific Standard Time) new Date(år, måned, dag, timer, minutter, sekunder, millisekunder)-
Opretter et date objekt med de givne komponenter i den lokale tidszone. Kun de første to argumenter er obligatoriske.
årskal have 4 tal. For kompatibilitet er to tal også tilladt og betragtes som19xx. F.eks.98er det samme som1998. Men, brug af 4 tal er stærkt anbefalet.månedtallet for måned starter fra0(Jan), op til11(Dec).dagparameteren er den aktuelle dag i måneden. Hvis den ikke gives sættes den til1.- Hvis
timer/minutter/sekunder/millisekunderikke gives, sættes de til0.
For eksempel, for at oprette et
Dateobjekt for 1. januar 2011 kl. 00:00:00, kan vi bruge:new Date(2011, 0, 1, 0, 0, 0, 0); // 1 Jan 2011, 00:00:00 new Date(2011, 0, 1); // samme resultat, timer osv. er sat til 0 som standardMaksimal præcision er 1 ms (1/1000 sekund):
let date = new Date(2011, 0, 1, 2, 3, 4, 567); alert( date ); // 1.01.2011, 02:03:04.567
Tilgå de enkelte komponenter i et dato objekt
Der er metoder til at tilgå år, måned og så videre fra et Date objekt:
- getFullYear()
- Henter årstallet (4 cifre)
- getMonth()
- Henter måneden, fra 0 til 11.
- getDate()
- Henter dagen i måneden, fra 1 til 31 (Metodens navn er lidt mærkeligt).
- getHours(), getMinutes(), getSeconds(), getMilliseconds()
- Henter de tilsvarende tidskomponenter.
getYear(), men getFullYear()Mange JavaScript motorer har implememnteret en ikke-standard metode ved navn getYear(). Denne metode er udfaset. Den returnerer ofte 2-cifret år. Brug getFullYear() til at hente årstallet.
Derudover kan vi også få ugedagen:
- getDay()
- Henter ugedagen, fra
0(søndag) til6(lørdag). Den første dag er som standard altid søndag. I Danmark er det mandag der betragtes som første ugedag, men det kan ikke ændres.
Alle metoderne ovenfor returnerer komponenterne i forhold til den lokale tidszone.
Der er også deres UTC-modsvar, som returnerer dag, måned, år og så videre for tidszonen UTC+0: getUTCFullYear(), getUTCMonth(), getUTCDay(). Bare indsæt "UTC" lige efter "get".
Hvis din lokale tidszone er forskellig fra UTC, så viser koden nedenfor forskellige timer:
Hvis din lokale tidszone er forskellig fra UTC, så viser koden nedenfor forskellige timer:
// nuværende dato
let date = new Date();
// Timer i den lokale tidszone
alert( date.getHours() );
// Timer i UTC+0 tidszone (London tid uden sommertid)
alert( date.getUTCHours() );
Udover de givne metoder er der to specielle der ikke har en UTC-variant:
- getTime()
-
Returnerer en timestamp for datoen – det antal millisekunder der er gået fra 1. januar 1970 UTC+0.
- getTimezoneOffset()
-
Returnerer forskellen mellem UTC og den lokale tidszone, i minutter. For eksempel, hvis du er i tidszonen UTC-1, så returnerer den
60(fordi UTC er 60 minutter foran). Hvis du er i tidszonen UTC+3, så returnerer den-180(fordi UTC er 180 minutter bagud).:// hvis du er i tidszonen UTC-1, gives 60 // hvis du er i tidszonen UTC+3, gives -180 alert( new Date().getTimezoneOffset() );
Sæt de enkelte komponenter i et dato objekt
De følgende metoder tillader at sætte dato/tidskomponenter:
setFullYear(year, [month], [date])setMonth(month, [date])setDate(date)setHours(hour, [min], [sec], [ms])setMinutes(min, [sec], [ms])setSeconds(sec, [ms])setMilliseconds(ms)setTime(milliseconds)(sætter hele datoen baseret på antal millisekunder siden 01.01.1970 UTC)
Hver af disse undtaget setTime() har en UTC-variant, for eksempel: setUTCHours().
Som vi kan se, kan nogle metoder sætte flere komponenter på én gang, for eksempel setHours. De komponenter der ikke er nævnt ændres ikke.
For eksempel:
let today = new Date();
today.setHours(0);
alert(today); // stadig dagen idag, men timer er ændret til 0
today.setHours(0, 0, 0, 0);
alert(today); // stadig dagen idag, men tiden er sat til 00:00:00.
Automatisk korrektion
autokorrektion er en praktisk feature af Date objekter. Vi kan sætte værdier uden for det normale interval, og det vil automatisk justere sig.
For eksempel:
let date = new Date(2013, 0, 32); // 32 Jan 2013 ?!?
alert(date); // ...bliver til 1st februar 2013!