Start · Sprachen · JavaScript · Referenz · Temporal

Temporal

Klasse

Das <code>Temporal</code>-Objekt stellt eine moderne, unveränderliche API für Datums- und Zeitoperationen bereit, inklusive Zeitzonen, Kalender, Arithmetik und Formatierung.

seit JavaScript Stage 3 Proposal (experimentell; noch kein Baselin Kategorie: core

Signatur

class Temporal

Beschreibung

Temporal ist ein globales Namespace-Objekt, das eine vollständige Neuentwicklung der Datums- und Zeitverwaltung in JavaScript darstellt und die bekannten Schwächen von Date behebt. Es bietet spezialisierte Klassen für verschiedene Anwendungsfälle: Temporal.PlainDate für reine Kalenderdaten ohne Uhrzeit, Temporal.PlainTime für Uhrzeiten ohne Datum, Temporal.PlainDateTime für Datum und Uhrzeit ohne Zeitzoneninformation, sowie Temporal.ZonedDateTime für vollständige Zeitpunkte inklusive Zeitzone.

Alle Temporal-Objekte sind unveränderlich (immutable): Jede Manipulation (z. B. Addition von Tagen) gibt ein neues Objekt zurück, anstatt das bestehende zu verändern. Darüber hinaus unterstützt Temporal eingebaute Zeitzonen über Temporal.TimeZone sowie verschiedene Kalender (gregorianisch, islamisch, hebräisch, japanisch u. v. m.) über Temporal.Calendar.

Zeitintervalle und Abstände werden als Temporal.Duration ausgedrückt und können für Arithmetik mit Datumsobjekten genutzt werden. Mit Temporal.Instant lassen sich absolute Zeitpunkte (Unix-Timestamp mit Nanosekunden-Präzision) verwalten. Die Klasse Temporal.Now liefert den aktuellen Zeitpunkt in verschiedenen Darstellungsformen.

  • Temporal.PlainDate – Datum ohne Uhrzeit/Zeitzone
  • Temporal.PlainTime – Uhrzeit ohne Datum/Zeitzone
  • Temporal.PlainDateTime – Datum + Uhrzeit ohne Zeitzone
  • Temporal.ZonedDateTime – Datum + Uhrzeit + Zeitzone (empfohlen für Wanduhrzeit)
  • Temporal.Instant – Absoluter Zeitpunkt (UTC, Nanosekunden-Präzision)
  • Temporal.Duration – Zeitdauer für Arithmetik
  • Temporal.TimeZone – Repräsentation einer Zeitzone
  • Temporal.Calendar – Repräsentation eines Kalenders
  • Temporal.Now – Hilfsobjekt für den aktuellen Zeitpunkt

Rückgabewert

Typ
void
Beschreibung
Temporal ist ein Namespace-Objekt und wird nicht direkt instanziiert. Die einzelnen Klassen innerhalb des Namespaces werden über ihre jeweiligen Konstruktoren oder Factory-Methoden erzeugt.

Beispiele

Aktuelles Datum, Arithmetik und Formatierung mit Temporal.PlainDate

// Aktuelles Datum (ohne Zeitzone)
const today = Temporal.Now.plainDateISO();
console.log(today.toString()); // z. B. "2024-06-15"

// Datum in 30 Tagen berechnen
const in30Days = today.add({ days: 30 });
console.log(in30Days.toString()); // z. B. "2024-07-15"

// Differenz zwischen zwei Daten
const start = Temporal.PlainDate.from('2024-01-01');
const end = Temporal.PlainDate.from('2024-06-15');
const diff = start.until(end);
console.log(`${diff.months} Monate und ${diff.days} Tage`); // z. B. "5 Monate und 14 Tage"

// Datum auf Gültigkeit prüfen und manipulieren
const geburtstag = Temporal.PlainDate.from({ year: 1990, month: 3, day: 25 });
const naechsterGeburtstag = geburtstag.with({ year: today.year });
console.log(naechsterGeburtstag.toString()); // "2024-03-25"
2024-06-15 2024-07-15 5 Monate und 14 Tage 2024-03-25

Zeitzonen-bewusste Zeitpunkte mit Temporal.ZonedDateTime

// Aktuellen Zeitpunkt in einer bestimmten Zeitzone ermitteln
const jetzt = Temporal.Now.zonedDateTimeISO('Europe/Berlin');
console.log(jetzt.toString());
// z. B. "2024-06-15T14:30:00+02:00[Europe/Berlin]"

// Zeitpunkt in eine andere Zeitzone konvertieren
const inNewYork = jetzt.withTimeZone('America/New_York');
console.log(inNewYork.toString());
// z. B. "2024-06-15T08:30:00-04:00[America/New_York]"

// Zeitpunkt aus ISO-String parsen
const meeting = Temporal.ZonedDateTime.from(
  '2024-09-01T10:00:00+09:00[Asia/Tokyo]'
);
console.log(meeting.hour); // 10
console.log(meeting.timeZoneId); // "Asia/Tokyo"

// Zeitdauer addieren (DST-sicher!)
const inZweiStunden = jetzt.add({ hours: 2 });
console.log(inZweiStunden.toLocaleString('de-DE'));
// z. B. "15.6.2024, 16:30:00"

// Instant (absoluter Zeitpunkt) aus ZonedDateTime extrahieren
const instant = jetzt.toInstant();
console.log(instant.epochMilliseconds); // Unix-Timestamp in ms
2024-06-15T14:30:00+02:00[Europe/Berlin] 2024-06-15T08:30:00-04:00[America/New_York] 10 Asia/Tokyo 15.6.2024, 16:30:00 1718451000000

// Wichtig · Fallstricke

Browserkompatibilität (Stand 2024): Temporal befindet sich im TC39-Prozess auf Stage 3 und ist noch in keinem Browser standardmäßig aktiviert. Für den produktiven Einsatz wird das Polyfill @js-temporal/polyfill empfohlen. Node.js unterstützt Temporal ebenfalls noch nicht nativ.

Nicht zu verwechseln mit Date: Temporal-Objekte sind vollständig unveränderlich – Methoden wie .add() oder .with() geben immer neue Instanzen zurück. Das bisherige Date-Objekt bleibt weiterhin verfügbar, aber die Verwendung von Temporal wird für neue Projekte empfohlen, sobald es stabil ist.

Nanosekunden-Präzision: Temporal.Instant und Temporal.ZonedDateTime arbeiten mit Nanosekunden-Präzision, was deutlich über die Millisekunden-Präzision von Date hinausgeht. Für JavaScript-Zahlen (IEEE 754) kann dies bei sehr großen Epochenwerten zu Genauigkeitsproblemen führen – verwende hierfür epochNanoseconds als BigInt.

Kalender-Unterstützung: Standardmäßig wird der ISO-8601-Kalender verwendet. Andere Kalender können explizit angegeben werden, z. B. Temporal.PlainDate.from({ year: 5784, month: 1, day: 1, calendar: 'hebrew' }).