Przejd藕 do聽tre艣ci

Temporal API - koniec koszmaru pracy z datami 馃ぉ

Praktyczne om贸wienie Temporal API: dlaczego Date w JavaScript sprawia problemy i jak Temporal porz膮dkuje daty, czas i strefy czasowe.

Klepsydra i abstrakcyjne zegary symbolizuj膮ce Temporal API

Temporal API to nowe API JavaScriptu do pracy z datami, godzinami i strefami czasowymi. Nie jest kolejn膮 bibliotek膮, kt贸r膮 trzeba doinstalowa膰 do projektu, tylko kierunkiem, w kt贸rym sam JavaScript ma w ko艅cu uporz膮dkowa膰 temat dat. Cel jest prosty: mniej zgadywania, mniej dziwnych przesuni臋膰 czasu i mniej sytuacji, w kt贸rych data, godzina, strefa czasowa i konkretny moment w czasie s膮 wrzucone do jednego worka.

W czerwcu 2026 Temporal jest ju偶 na Stage 4 w TC39, czyli od strony standardu jest praktycznie gotowy. Zaczyna te偶 pojawia膰 si臋 w przegl膮darkach i Node.js. To nadal nie znaczy, 偶e mo偶na wrzuci膰 go do ka偶dej aplikacji bez sprawdzenia. MDN oznacza Temporal jako funkcj臋 o ograniczonej dost臋pno艣ci, a najwi臋kszym znakiem zapytania pozostaj膮 Safari i iOS.

Dlaczego to potrzebne?

Stary Date w JS to relikt, z kt贸rym da si臋 偶y膰, ale trudno go lubi膰. Jeden obiekt pr贸buje opisa膰 za du偶o rzeczy naraz: konkretny moment w czasie, lokaln膮 dat臋, godzin臋 i wynik przelicze艅 zale偶nych od ustawie艅 systemu u偶ytkownika. Do tego dochodz膮 klasyczne pu艂apki: miesi膮ce liczone od zera, automatyczne "naprawianie" niepoprawnych dat, odczytywanie dat zapisanych jako tekst oraz metody, kt贸re potrafi膮 po cichu zmieni膰 istniej膮c膮 dat臋.

Najwi臋kszy problem pojawia si臋 wtedy, gdy aplikacja musi obs艂u偶y膰 realne scenariusze: rezerwacje, deadline'y, spotkania w r贸偶nych krajach, cykliczne wydarzenia, zmian臋 czasu z letniego na zimowy albo dane zapisywane po stronie serwera w UTC i wy艣wietlane lokalnie u偶ytkownikowi. W takich miejscach Date bardzo 艂atwo pozwala napisa膰 kod, kt贸ry wygl膮da poprawnie, ale przesuwa godzin臋 o jedn膮 stref臋 albo jeden dzie艅.

Co konkretnie daje Temporal?

Temporal robi jedn膮 bardzo wa偶n膮 rzecz: rozdziela poj臋cia, kt贸re Date miesza艂 w jednym obiekcie. Temporal.Instant opisuje konkretny punkt w czasie. Temporal.PlainDate to sama data, bez godziny i strefy. Temporal.PlainTime to sama godzina. Temporal.ZonedDateTime 艂膮czy dat臋, godzin臋 i konkretn膮 stref臋 czasow膮, np. Europe/Warsaw. Do tego dochodzi Temporal.Duration, czyli prosty spos贸b opisania r贸偶nicy typu "dodaj 2 godziny i 30 minut".

W praktyce oznacza to mniej ukrytych przelicze艅 i wi臋cej decyzji zapisanych w kodzie wprost. Temporal nie zmienia te偶 raz utworzonych warto艣ci. Metody takie jak add() i subtract() zwracaj膮 nowe daty, zamiast po cichu modyfikowa膰 istniej膮c膮.

Przyk艂ady praktyczne

Tworzenie daty ze stref膮 czasow膮

Przyk艂ad: Spotkanie w Warszawie o 14:30, 11 sierpnia 2026 roku:

const date = new Date('2026-08-11T14:30:00+02:00');
console.log(date.toString()); // -> Wynik zostanie pokazany w lokalnej strefie u偶ytkownika.

const meeting = Temporal.ZonedDateTime.from({
    year: 2026,
    month: 8,
    day: 11,
    hour: 14,
    minute: 30,
    timeZone: 'Europe/Warsaw',
});

console.log(meeting.toString()); // -> 2026-08-11T14:30:00+02:00[Europe/Warsaw]

Dodawanie czasu bez mutowania

const later = meeting.add({ hours: 2, minutes: 30 });

console.log(meeting.toString()); // -> 2026-08-11T14:30:00+02:00[Europe/Warsaw]
console.log(later.toString()); // -> 2026-08-11T17:00:00+02:00[Europe/Warsaw]

Konwersja i formatowanie

const instant = Temporal.Instant.from('2026-08-11T12:30:00Z');
const warsawTime = instant.toZonedDateTimeISO('Europe/Warsaw');

console.log(warsawTime.toLocaleString('pl-PL', {
    dateStyle: 'medium',
    timeStyle: 'short',
    timeZoneName: 'short',
}));

Wsparcie przegl膮darek i jak zacz膮膰

Najpro艣ciej testowa膰 Temporal tam, gdzie jest ju偶 wbudowany. W czerwcu 2026 mo偶na sprawdza膰 go m.in. w Firefoxie 139+, Chrome/Edge 144+ oraz w Node.js 26+. Aktualn膮 list臋 obs艂ugiwanych przegl膮darek warto sprawdza膰 w Can I Use, bo wsparcie, niestety, nadal nie jest r贸wnomierne.

Do szybkiego sprawdzenia wystarczy prosty test w kodzie:

console.log(typeof globalThis.Temporal !== 'undefined'); // -> true albo false, zale偶nie od tego, gdzie uruchamiasz kod

Je偶eli chcesz poeksperymentowa膰 w projekcie ju偶 teraz, mo偶esz u偶y膰 polyfilla, np. @js-temporal/polyfill. To dodatkowa paczka, kt贸ra pozwala korzysta膰 z Temporal zanim dana przegl膮darka obs艂u偶y go sama. Warto jednak pami臋ta膰, 偶e TC39 wprost odradza u偶ywanie starego, testowego polyfilla z repozytorium proposal-temporal w prawdziwych projektach.

Kiedy mo偶na bezpiecznie u偶ywa膰 go w produkcji?

Bez polyfilla - dopiero wtedy, gdy przegl膮darki i wersje, z kt贸rych korzystaj膮 Twoi u偶ytkownicy, maj膮 ju偶 dost臋p do Temporal. W aplikacji webowej oznacza to g艂贸wnie sprawdzenie Safari, iOS, starszych wersji Google Chrome, a tak偶e osadzane w apkach mobilnych WebView oraz starsze przegl膮darki narzucane przez firmy ich pracownikom. Na backendzie trzeba po prostu upewni膰 si臋, na jakiej wersji Node.js dzia艂a projekt i czy jest to ju偶 spokojny wyb贸r na produkcj臋. Node.js 26 w czerwcu 2026 jest jeszcze wydaniem Current, a nie LTS.

Z polyfillem mo偶na zacz膮膰 wcze艣niej, ale nadal warto potraktowa膰 go jak co艣, co bierzesz na siebie w produkcji. Trzeba sprawdzi膰, ile kodu dok艂adamy do aplikacji, czy wszystko dzia艂a w przegl膮darkach u偶ywanych przez u偶ytkownik贸w, jak zachowuje si臋 zmiana czasu letniego i zimowego oraz gdzie nowy kod spotyka si臋 ze starym kodem opartym na Date.

Najbezpieczniejszy spos贸b u偶ywania Temporal w praktyce jest do艣膰 prosty: konkretne momenty w czasie trzymaj jako UTC albo Instant, zwyk艂e daty kalendarzowe jako PlainDate, a wydarzenia zwi膮zane z konkretnym miejscem jako ZonedDateTime. Przeliczanie do widoku u偶ytkownika r贸b dopiero tam, gdzie pokazujesz dane na ekranie.

Podsumowanie

Temporal API nie sprawia, 偶e daty nagle staj膮 si臋 proste. Sprawia za to, 偶e problemy s膮 nazwane wprost: inny typ dla daty, inny dla godziny, inny dla punktu w czasie i inny dla daty ze stref膮 czasow膮. To du偶a zmiana wzgl臋dem leciwego Date, kt贸ry przez lata zmusza艂 frontendowc贸w do zgadywania, dok艂adania bibliotek i pisania bardzo ostro偶nego kodu.

Na dzi艣 Temporal warto zna膰, testowa膰 i bra膰 pod uwag臋 przy nowych projektach. Nie trzeba od razu przepisywa膰 ca艂ej aplikacji. Warto jednak wiedzie膰, 偶e JavaScript w ko艅cu dostaje sensowniejszy spos贸b pracy z datami - i 偶e przed u偶yciem na produkcji trzeba sprawdzi膰 wsparcie albo 艣wiadomie doda膰 polyfill.