`Date`-objekt

Denne artikel forklarer Date-objektet.

Vi forklarer Date-objektet trin for trin, fra grundlæggende mekanismer til ofte anvendte operationer i praktisk arbejde, med konkrete eksempler.

YouTube Video

Date-objekt

Hvad er Date-objektet?

JavaScripts Date-objekt er et standardobjekt til håndtering af dato og tid. Internt håndterer det dato og tid baseret på antallet af millisekunder, der er gået siden 1. januar 1970, 00:00:00 UTC.

Lad os først oprette et Date-objekt, der repræsenterer den aktuelle dato og tid, og kontrollere dets indhold.

1const now = new Date();
2console.log(now);
  • Denne kode opretter et Date-objekt, der repræsenterer den aktuelle dato og tid på tidspunktet for kørsel. Visningsformatet afhænger af kørselsmiljøet, såsom browser eller operativsystem.

Sådan opretter du et Date-objekt

Date-objekter kan oprettes på flere måder afhængigt af dine behov. Et særligt vigtigt punkt, der let misforstås, er at konstruktørens argument for måned er nul-baseret, hvilket betyder at måneder starter ved 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) betyder month at 0 er januar og 11 er december. Hvis du ikke forstår denne specifikation, kan du utilsigtet oprette en dato, der er en måned forkert, så vær altid opmærksom.

Hentning af hvert element af dato og tid

Du kan individuelt hente år, måned, dag, tid og ugedag fra et Date-objekt. Alle getter-metoder returnerer værdier som tal.

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)
  • Ligesom ved oprettelse skal du være opmærksom på, at getMonth() også er nul-baseret. Når det bruges til visning, er det almindeligt at lægge 1 til for at justere værdien.
  • getDay() returnerer ugedagen som et tal. 0 repræsenterer søndag, og 6 repræsenterer lørdag.

Ændring af datoer og tidspunkter

Date er et mutérbart objekt, hvilket betyder, at du kan ændre dets værdier senere. Denne egenskab er nyttig, men du skal være opmærksom på utilsigtede bivirkninger.

Du kan bruge set-metoderne til at ændre værdierne for 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å nul-baseret. Det originale objekt ændres direkte.

Tillæg og fratrækning af datoer

Det er almindeligt at udføre datoberegninger ved at bruge millisekunder eller ved at bruge setDate(). Til dagbaserede beregninger er brugen af setDate() særlig intuitiv og sikker.

1const date = new Date("2025-01-01");
2
3date.setDate(date.getDate() + 7);
4console.log(date);
  • I dette eksempel beregner vi datoen 7 dage efter den angivne dato. Selv hvis tillægget krydser over i en ny måned, justeres det automatisk.

Sammenligning af Date-objekter

Date-objekter kan sammenlignes som tal. Dette skyldes, at den interne millisekundværdi 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 rækkefølgen af datoer, er der ingen ekstra konvertering nødvendig. Du kan bruge sammenligningsoperatorer direkte.

Arbejder med tidsstempler (millisekunder)

Date kan konverteres til og fra tal, der repræsenterer millisekunder (tidsstempler). Dette format bruges ofte i API'er eller databaseintegrationer.

1const now = Date.now();
2console.log(now);
3
4const date = new Date(now);
5console.log(date);
  • Date.now() returnerer det aktuelle tidspunkt i millisekunder. Det er meget nyttigt, når du vil gemme eller sammenligne værdien som et tal.

Formatering af datoer som tekststrenge

At vise et Date som det er, resulterer ofte i et format, der måske ikke passer til dine behov. Derfor bør du eksplicit formatere det efter dine krav.

1const date = new Date("2025-01-01");
2
3const formatted = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
4console.log(formatted);
  • Ved at formatere det manuelt på denne måde kan du fuldt ud kontrollere visningsformatet. I praktisk arbejde anvendes biblioteker ofte til dette formål.

Forskel mellem UTC og lokal tid

Date giver metoder til at håndtere både lokal tid og UTC. Det er vigtigt at forstå denne forskel korrekt for serverintegrationer og international kompatibilitet.

1const date = new Date();
2
3console.log(date.getHours());    // Local time (hours)
4console.log(date.getUTCHours()); // UTC time (hours)
  • getUTC*-metoderne returnerer altid værdier baseret på UTC. Vær især opmærksom, når du behandler data på tværs af tidszoner.

Forholdsregler ved brug af Date-objekter

Date er praktisk, men har også nogle vanskelige aspekter. Især den nul-baserede måned og dens mutérbarhed er almindelige årsager til fejl.

Lad os se på nogle konkrete eksempler nedenfor for at forstå konsekvenserne af, at Date-objektet er mutabelt.

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 bevare den oprindelige dato og tid, skal du altid lave en kopi. Blot det at være opmærksom på dette punkt kan hjælpe dig med at undgå utilsigtede fejl.

Grunde til, at Date er vanskelig at håndtere, og kriterier for at bruge biblioteker

Date-objektet tilbyder tilstrækkelige funktioner som standard, men der er situationer i praksis, hvor det kan være svært at bruge. Typiske problemer omfatter, at måneder og ugedage er nulbaserede, tendens til at forveksle lokal tid og UTC, og at objektet er mutabelt. Disse problemer kan føre til flere fejl, efterhånden som datobehandlingen øges.

Date er tilstrækkeligt til simpel datoindhentning og -sammenligning, men kodelæsbarhed og vedligeholdelse har en tendens til at falde, jo flere datoberegninger eller visningsformateringer der foretages.

Hvis du har følgende krav, kan det være en fordel at bruge letvægts dato-biblioteker som dayjs eller date-fns.

  • Du skal eksplicit håndtere tidszoner
  • Du har ofte behov for at udføre dato- eller intervalberegninger
  • Du ønsker fleksibelt at kunne ændre visningsformatet
  • Du ønsker at håndtere datoer og tidspunkter immutabelt

Sammendrag

Date-objekter er det mest grundlæggende værktøj til at håndtere dato og tid i JavaScript. Ved at forstå dets finurligheder og udføre korrekt oprettelse, hentning, beregning og formatering kan du bruge det sikkert i virkelige opgaver.

Når du har lært det grundlæggende, er det en praktisk løsning at bruge datobiblioteker efter behov.

Du kan følge med i ovenstående artikel ved hjælp af Visual Studio Code på vores YouTube-kanal. Husk også at tjekke YouTube-kanalen.

YouTube Video