`Date`-objektet
Denne artikkelen forklarer Date-objektet.
Vi vil forklare Date-objektet trinn for trinn, fra grunnleggende mekanismer til vanlige operasjoner i praktisk arbeid, med konkrete eksempler.
YouTube Video
Date-objektet
Hva er Date-objektet?
JavaScript sitt Date-objekt er et standardobjekt for å håndtere datoer og klokkeslett. Internt håndterer det dato og tid basert på antall millisekunder som har gått siden 1. januar 1970, 00:00:00 UTC.
La oss først opprette et Date-objekt som representerer gjeldende dato og klokkeslett, og se på innholdet.
1const now = new Date();
2console.log(now);- Denne koden oppretter et
Date-objekt som representerer gjeldende dato og tid ved utførelsesøyeblikket. Visningsformatet avhenger av utførelsesmiljøet, som nettleser eller operativsystem.
Hvordan lage et Date-objekt
Date-objekter kan opprettes på flere måter avhengig av dine behov. Et spesielt viktig punkt som det er lett å gjøre feil med, er at konstruktørargumentet for måned er nullbasert, altså at månedene starter på 0.
1const d1 = new Date(); // Current date and time
2const d2 = new Date("2025-01-01"); // Create from an ISO date string
3const d3 = new Date(2025, 0, 1); // January 1, 2025 (month is zero-based)
4const d4 = new Date(2025, 0, 1, 10, 30); // January 1, 2025, 10:30
5
6console.log(d1, d2, d3, d4);- I
new Date(year, month, day)betyrmonthat0er januar og11er desember. Hvis du ikke forstår denne spesifikasjonen, kan du utilsiktet opprette en dato som er én måned feil, så vær alltid oppmerksom.
Hente ut hvert element av dato og tid
Du kan hente ut år, måned, dag, klokkeslett og ukedag enkeltvis fra et Date-objekt. Alle getter-metodene returnerer verdier som tall.
1const date = new Date();
2
3console.log(date.getFullYear()); // Year
4console.log(date.getMonth()); // Month (0-based: 0 = January)
5console.log(date.getDate()); // Day of the month
6console.log(date.getHours()); // Hours
7console.log(date.getMinutes()); // Minutes
8console.log(date.getSeconds()); // Seconds
9console.log(date.getDay()); // Day of the week (0 = Sunday, 6 = Saturday)
- Som ved oppretting, vær oppmerksom på at
getMonth()også er nullbasert. Når du bruker det til visning, er det vanlig å legge til 1 for å justere verdien. getDay()returnerer ukedagen som et tall. 0 representerer søndag, og 6 representerer lørdag.
Endring av datoer og tider
Date er et muterbart objekt, som betyr at du kan endre verdiene senere. Denne egenskapen er nyttig, men du må være forsiktig med utilsiktede bivirkninger.
Du kan bruke set-metoder for å endre verdiene til et eksisterende Date-objekt.
1const date = new Date("2025-01-01");
2
3date.setFullYear(2026);
4date.setMonth(5); // June
5date.setDate(15);
6
7console.log(date);setMonth()er også nullbasert. Det opprinnelige objektet endres direkte.
Legge til og trekke fra datoer
Det er vanlig å utføre datoberegninger ved å bruke millisekunder eller med setDate(). For dagbaserte beregninger er det spesielt intuitivt og trygt å bruke setDate().
1const date = new Date("2025-01-01");
2
3date.setDate(date.getDate() + 7);
4console.log(date);- I dette eksempelet beregner vi datoen 7 dager etter den angitte datoen. Selv om du havner i en ny måned etter å ha lagt til dager, justeres datoen automatisk.
Sammenligning av Date-objekter
Date-objekter kan sammenlignes som tall. Dette er fordi den interne millisekundverdien sammenlignes.
1const a = new Date("2025-01-01");
2const b = new Date("2025-01-10");
3
4console.log(a < b); // true
5console.log(a > b); // false
- Hvis du vil bestemme rekkefølgen av datoer, kreves ingen ekstra konvertering. Du kan bruke sammenligningsoperatorer direkte.
Arbeid med tidsstempler (millisekunder)
Date kan konverteres til og fra tall som representerer millisekunder (tidsstempler). Dette formatet er ofte brukt i API-er eller databaseintegrasjoner.
1const now = Date.now();
2console.log(now);
3
4const date = new Date(now);
5console.log(date);Date.now()returnerer gjeldende tid i millisekunder. Dette er svært nyttig når du vil lagre eller sammenligne verdien som et tall.
Formatering av datoer som tekststrenger
Å vise en Date som den er, gir ofte et format som kanskje ikke passer dine behov. Derfor bør du eksplisitt formatere den etter dine krav.
1const date = new Date("2025-01-01");
2
3const formatted = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
4console.log(formatted);- Ved å formatere manuelt slik, får du full kontroll over visningsformatet. I praktisk arbeid brukes ofte biblioteker til dette formålet.
Forskjell mellom UTC og lokal tid
Date tilbyr metoder for å håndtere både lokal tid og UTC. Det er viktig å forstå denne forskjellen riktig for serverintegrasjon og internasjonal kompatibilitet.
1const date = new Date();
2
3console.log(date.getHours()); // Local time (hours)
4console.log(date.getUTCHours()); // UTC time (hours)
getUTC*-metodene returnerer alltid verdier basert på UTC. Vær spesielt oppmerksom når du håndterer data på tvers av tidssoner.
Forholdsregler ved bruk av dato-objekter
Date er praktisk, men har også noen vanskelige aspekter. Spesielt den nullbaserte måneden og mutabiliteten er vanlige årsaker til feil.
La oss se på konkrete eksempler nedenfor for å se effekten av at Date er muterbar.
1const original = new Date("2025-01-01");
2const copy = new Date(original);
3
4copy.setDate(10);
5
6console.log(original);
7console.log(copy);- Hvis du vil beholde opprinnelig dato og tid, opprett alltid en kopi. Bare det å være klar over dette vil hjelpe deg å unngå utilsiktede feil.
Grunner til at Date er vanskelig å håndtere og kriterier for bruk av biblioteker.
Date-objektet gir tilstrekkelige funksjoner som standard, men det finnes praksis-situasjoner der det kan være vanskelig å bruke. Typiske utfordringer inkluderer at måneder og ukedager starter på null, lett forveksling av lokal tid og UTC, og at objektet er muterbart. Disse problemene kan føre til flere feil etter hvert som datobehandlingen øker.
Date er tilstrekkelig for enkel henting og sammenligning av datoer, men lesbarhet og vedlikeholdbarhet av kode synker ofte ved mer omfattende datoberegninger eller formatering.
Hvis du har behov som disse, kan det være lurt å vurdere lette datobiblioteker som dayjs eller date-fns.
- Du må håndtere tidssoner eksplisitt.
- Du må ofte utføre datoberegninger eller intervallberegninger.
- Du ønsker å endre visningsformatet fleksibelt.
- Du ønsker å håndtere datoer og tid som immutable objekter.
Sammendrag
Date-objekter er det mest grunnleggende verktøyet for å håndtere dato og tid i JavaScript. Ved å forstå dets særegenheter og utføre riktig opprettelse, henting, beregning og formatereing, kan du bruke det trygt i praktisk arbeid.
Når du har lært det grunnleggende, er det praktisk å bruke datobiblioteker etter behov.
Du kan følge med på artikkelen ovenfor ved å bruke Visual Studio Code på vår YouTube-kanal. Vennligst sjekk ut YouTube-kanalen.