programmatūra · 5 min · 25.07.2026

Temporal API sasniedz ceturto posmu un aizstāj JavaScript Date pēc deviņiem gadiem

No 2026. gada 5. maija JavaScript izstrādātāji pirmoreiz var rēķināties ar datumiem bez vecās Date klases āķiem. Node.js 26 pēc noklusējuma ieslēdz Temporal, jauno datuma un laika API, bez karoga un bez eksperimentālas atrunas. Dažas nedēļas iepriekš, 13. martā, TC39 komiteja Ņujorkā to apstiprināja ceturtajā posmā, tāpēc Temporal tagad ietilpst ECMAScript 2026 standartā.

Priekšlikums pie trešā posma nonāca 2021. gadā un tad vēl piecus gadus gaidīja pilnu apstiprinājumu. Viss ceļš ilga deviņus gadus. Node.js bija starp pirmajām izpildvidēm, kas Temporal piegādā gatavu lietošanai, līdzās Firefox un Chrome pārlūkiem.

Kāpēc Date bija jāaizstāj

JavaScript Date 1995. gadā tika pārņemts no Java un mantoja tās kļūdas. Mēneši sākas ar nulli, tāpēc new Date(2026, 0, 1) apzīmē janvāri. Divpadsmito mēnesi kods pieraksta kā 11. Objekts ir maināms, tāpēc funkcija var klusi pārrakstīt jau nodoto datumu un radīt grūti atrodamas blakusparādības.

Laika zonu izvēle aprobežojas ar UTC un sistēmas vietējo zonu. Datuma nolasīšana ir vēl viena problēma. Izsaukums new Date("2/3/2026") vienā vidē nozīmē 3. februāri, citā 2. martu. Metode getYear() gada vietā atgriež gadu mīnus 1900, tāpēc 2026 kļūst par 126.

Maināmība radīja īpaši mānīgas kļūdas. Ja funkcija ar setMonth() pārrakstīja jau nodotu datumu, izmaiņa parādījās arī tur, kur to negaidīja. Šādas koda vietas komandas meklēja stundām.

Praksē tas nozīmēja, ka katrs projekts ar laika zonu vai datumu rēķiniem paļāvās uz ārēju bibliotēku. Moment.js autori jau 2020. gadā paziņoja, ka projektu vairs aktīvi neizstrādās un ieteica meklēt alternatīvas. Temporal to darbu pārņem pati valoda.

Ko Temporal dara citādi

Temporal sadala laiku atsevišķos tipos. Temporal.PlainDate ir datums bez laika zonas, Temporal.PlainTime tikai pulkstenis, bet Temporal.ZonedDateTime pilns laiks ar zonu. Temporal.Instant apzīmē konkrētu mirkli laika asī, Temporal.Duration intervālu starp diviem mirkļiem.

Visi tipi ir nemaināmi. Katra darbība atgriež jaunu objektu un atstāj sākotnējo neskartu:

const date = Temporal.PlainDate.from("2026-05-22");
const rit = date.add({ days: 1 });

date.toString();  // "2026-05-22"
rit.toString();   // "2026-05-23"

Aritmētika strādā ar skaidriem laukiem. Datumam var pieskaitīt { months: 2, days: 10 }. Rezultāts ņem vērā mēnešu garumu. Divu ZonedDateTime starpību var iegūt kā Temporal.Duration un izteikt stundās, dienās vai nedēļās.

Pašreizējo laiku dod Temporal.Now. Izsaukums Temporal.Now.zonedDateTimeISO("Europe/Riga") atgriež tekošo brīdi Rīgas zonā, bet Temporal.Now.instant() to pašu mirkli bez zonas. Laiku no vienas pilsētas uz citu pārrēķina ar withTimeZone(), kas ņem vērā gan nobīdi, gan vasaras laiku.

Laika zonas nāk no IANA datubāzes, tāpēc vasaras laika pārslēgšanos Temporal aprēķina pati. API saprot arī reģionālos kalendārus: Gregora, japāņu, ebreju, persiešu, ķīniešu un islāma. Datuma nolasīšana notiek stingri pēc ISO 8601, tāpēc divdomīgu rezultātu vairs nav.

Temporal komplektā ir aptuveni 4500 test262 atbilstības testu. Vecajai Date klasei to ir 594.

Deviņu gadu ceļš

Priekšlikumu virzīja Igalia inženieri Filips Čimento un Udžvals Šarma, bet finansējumu un inženierus deva Bloomberg. Uzņēmumam datumu un laika zonu apstrāde ir ikdienas darbs finanšu datos, tāpēc tas gadiem ieguldīja izstrādē.

Bloomberg šo darbu apraksta kā deviņus gadus ilgu projektu, kas bija jāpabeidz kopā ar visu TC39. Standartizētu serializāciju ar laika zonu un kalendāru noteica atsevišķs dokuments RFC 9557. Apstiprinājums ceturtajā posmā pienāca 113. TC39 plenārsēdē Ņujorkā.

Priekšlikums pirmoreiz parādījās 2017. gadā ar nosaukumu proposal-temporal. Kopš tā laika specifikācija izauga par vienu no apjomīgākajiem valodas papildinājumiem, kas aptver datuma, laika, ilguma un mirkļa tipus. Igalia paralēli rakstīja gan atsauces implementāciju, gan testu komplektu, ko tagad izmanto visi pārlūki. Tāpēc, kad Temporal sasniedza ceturto posmu, ieviešana pārlūkos jau bija gatava.

Kur to jau var lietot

Firefox 139 2025. gada maijā kļuva par pirmo pārlūku, kas Temporal ieslēdza pēc noklusējuma. Chrome un Edge to pievienoja 144. laidienā 2026. gada janvārī, bet Safari atbalsts pagaidām ir tehnoloģiju priekšskatījumā. TypeScript 6.0 beta versijā jau ir Temporal tipu definīcijas, tāpēc redaktors piedāvā autopapildināšanu. Ar to Temporal nonāca pie lielākās daļas lietotāju vēl pirms formālā apstiprinājuma.

Bibliotēkām tas nozīmē lielu pārkārtošanos. date-fns un Luxon autori jau gatavo Temporal atbalstu. Daļa jaunu projektu ārējo datumu bibliotēku vairs nepievieno.

Serverī Temporal strādā Node.js 26 versijā bez papildu iestatījumiem. Vecākiem projektiem der oficiālais polyfill, kas API pievieno vidēm bez iebūvēta atbalsta. Pāreja no Date nenotiks uzreiz. Abas sistēmas darbojas blakus. Starp tām var pārvērst vērtības ar toTemporalInstant(). Node.js 26 uz ilgtermiņa atbalstu pāries 2026. gada oktobrī.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no programmatūrasaistītie