Temporal-API-et: Nå blir tid og datoer i JavaScript mye enklere

JavaScripts nye Temporal-API er rett rundt hjørnet, og Deno har allerede fått støtte.

Endelig kommer det skikkelig innebygget støtte for avansert tidshåndtering i JavaScript. 📸: Ole Petter Baugerød Stokke
Endelig kommer det skikkelig innebygget støtte for avansert tidshåndtering i JavaScript. 📸: Ole Petter Baugerød Stokke Vis mer

Den innebygde støtten for håndtering av datoer og tid i JavaScript er kjent for å være klønete, inkonsekvent og lite fleksibelt. For eksempel er måneder nullindekserte (januar = 0) mens dager ikke er det, og det er ikke støtte for tidssoner.

Dermed tyr JavaScript-utviklere ofte til tredjepartsbiblioteker som date-fns når de skal jobbe med tid.

Nå blir dato- og tidshåndtering i JavaScript mye bedre og vesentlig enklere, takket være et helt nytt API kalt Temporal.

Det er flere år siden arbeidet med dette API-et startet, og Temporal skal ha vært "like rundt hjørnet" lenge. Men nå skjer det faktisk – "JavaScript Temporal is coming", skriver Brian Smith på MDN-bloggen.

– Implementeringer av det nye JavaScript Temporal-objektet begynner å bli tilgjengelige i eksperimentelle utgaver av nettlesere. Dette er store nyheter for webutviklere, ettersom arbeid med datoer og tid i JavaScript vil bli betydelig forenklet og modernisert, skriver Smith.

Java ga det opp for 28 år siden

I JavaScript har man frem til nå brukt det innebygde Date-objektet for å jobbe med tid.

Date-objektet i JavaScript er imidlertid en etterlevning fra da JavaScript ble laget i 1995. Da ble Date-objektet kopiert fra tidlig funksjonalitet i Java for håndtering av tid: java.util.Date.

– Java byttet ut denne implementasjonen allerede i 1997, men JavaScript var "stuck" med det samme API-et i nesten 30 år, til tross for kjente problemer, skriver Smith.

«JavaScript var "stuck" med det samme API-et i nesten 30 år, til tross for kjente problemer.»

Blant de største problemene med Date er at det kun er støtte for brukerens lokale tid og UTC, og at det ikke er støtte for tidssoner. Smith nevner også upålitelig parsing og at Date-objektet i seg selv kan muteres, noe som kan føre til bugs som er vanskelige å finne.

– Temporal er designet for å være en fullstendig erstatning for Date-objektet, og vil gjøre dato- og tidshåndtering pålitelig og forutsigbart.

Ruller ut støtte i nettlesere

Etter introduksjonen av Temporal-API-et vil Date-objektet regnes som "legacy"-funksjonalitet. Støtte for Temporal vil dukke opp i nye versjoner av nettlesere nå fremover.

Ifølge Smith er det Firefox som har den mest modne implementasjonen av Temporal til nå. Her er det støtte for Temporal i Nightly-versjonen hvis du aktiverer et flagg.

Også utenfor nettleseren begynner Temporal-støtte å dukke opp: JavaScript-kjøremiljøet Deno kom for noen dager siden i en ny versjon med Temporal-støtte.

Dette må foreløpig aktiveres med flagget --unstable-temporal.

– Det er lite sannsynlig at Temporal-API-et vil endre seg, og vi sikter på å gjøre det stabilt i Deno 2, skriver Deno i en pressemelding.

270 nye dokumentasjonssider

I motsetning til Date er ikke Temporal en constructor, det vil si at du ikke kan bruke det med new-operatoren slik du gjør med Date-objektet. I stedet er alle egenskaper og metoder statiske, slik som med for eksempel Math-objektet.

Et eksempel på hvordan du med Temporal kan hente ut dato og tidspunkt akkurat nå:

// The current date in the system's time zone
const dateTime = Temporal.Now.plainDateTimeISO();
console.log(dateTime); // e.g.: 2025-01-22T11:46:36.144

// The current date in the "America/New_York" time zone
const dateTimeInNewYork = Temporal.Now.plainDateTimeISO("America/New_York");
console.log(dateTimeInNewYork);
// e.g.: 2025-01-22T05:47:02.555

Temporal er et temmelig omfattende API – forrige uke ble det nemlig lagt til hele 270 nye sider på MDN med dokumentasjon, inkludert en masse eksempler på hvordan API-et kan brukes. TC39 har også dokumentasjon her.

– Med eksperimentelle implementasjoner på vei inn, er det nå et godt tidspunkt å prøve ut Temporal og bli kjent med det som vil bli den moderne måten å håndtere datoer og tid på i JavaScript, skriver Smith.