Temporal API (Noul Standard pentru Dată și Oră în JavaScript) în JavaScript

Dată și oră TC39 Stage 3 / ECMAScript Temporal

Înlocuitorul modern al vechiului obiect Date: obiecte imutabile, fusuri orare corecte fără biblioteci terțe (Moment/Day.js) și calcule precise de durată.

Sintaxă
const acum = Temporal.Now.instant(); const data = Temporal.PlainDate.from('2026-10-24');

Obiectul istoric Date din JavaScript este recunoscut la nivel universal ca fiind unul dintre cele mai deficitare elemente de limbaj: lunile sunt indexate ciudat de la 0 (ianuarie este 0, decembrie este 11), obiectele sunt mutabile, calculele de fus orar (Timezones) sunt aproape imposibile fără biblioteci greoaie (Moment.js, Day.js), iar trecerile de la ora de vară/iarnă creează bug-uri subtile.

Temporal API este noul standard global din JavaScript conceput pentru a înlocui complet obiectul Date. Toate obiectele Temporal sunt imutabile, respectă standardul internațional ISO 8601 și separă clar datele fără oră (PlainDate), orele fără dată (PlainTime) și momentele exacte cu fus orar (ZonedDateTime).

Exemple practice cu noul Temporal API
// 1. Obținerea momentului curent universal (UTC timestamp exact)
const acumUTC = Temporal.Now.instant();
console.log(acumUTC.toString()); // ex: "2026-10-24T14:30:00Z"

// 2. Data curentă în fusul orar al României (Europa/București)
const acumRomania = Temporal.Now.zonedDateTimeISO('Europe/Bucharest');
console.log(acumRomania.toString()); // ex: "2026-10-24T17:30:00+03:00[Europe/Bucharest]"

// 3. Crearea unei date pure (fără fus orar, fără erori de conversie)
const ziNastere = Temporal.PlainDate.from('1995-07-15');
console.log(ziNastere.year);  // 1995
console.log(ziNastere.month); // 7 (Iulie este corect 7, nu 6!)
console.log(ziNastere.day);   // 15

// 4. Calcule precise de timp (adunare / scădere de durate)
// Adăugăm 3 luni și 10 zile la o dată:
const dataExpirare = ziNastere.add({ months: 3, days: 10 });
console.log(dataExpirare.toString()); // "1995-10-25"

// 5. Calcularea diferenței exacte dintre două momente (Duration)
const astazi = Temporal.Now.plainDateISO();
const durata = astazi.since(ziNastere);
console.log(`Ai trăit ${durata.total({ unit: 'days' })} zile.`);

Structura Tipologică a Temporal API

Tip Temporal Ce reprezintă Exemplu de valoare
Temporal.PlainDate Doar an, lună și zi (fără oră și fără fus orar). 2026-10-24 (zile de naștere, date din calendar)
Temporal.PlainTime Doar oră, minute, secunde (fără dată). 14:30:00 (ora de deschidere a magazinului)
Temporal.ZonedDateTime Dată completă + oră + fus orar specific cu suport Daylight Saving. 2026-10-24T17:30:00+03:00[Europe/Bucharest]
Temporal.Duration O perioadă măsurabilă de timp (ani, luni, ore, secunde). P3M10D (trei luni și zece zile)