Signatur
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
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"
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
// 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' }).