Signatur
Beschreibung
Ein Temporal.PlainDateTime steht für eine „Wanduhrzeit“ (Datum und Uhrzeit) ohne Zeitzone. Es beschreibt deshalb keinen eindeutigen Zeitpunkt. Mit toZonedDateTime() ordnest du diese Wanduhrzeit einer Zeitzone zu und bekommst ein Temporal.ZonedDateTime. Das ist ein exakter Zeitpunkt mit Zeitzone und Kalender.
Typische Fälle: Ein Benutzer gibt in einem Formular einen Termin ein, etwa „15.06.2025, 09:00 Uhr“, und du willst ihn für einen Ort wie "Europe/Berlin" als echten Zeitpunkt speichern, in UTC umrechnen oder in einer anderen Zeitzone anzeigen.
Wegen der Sommerzeit gibt es manche Wanduhrzeiten gar nicht (Lücke beim Vorstellen der Uhr), andere gibt es zweimal (Überlappung beim Zurückstellen). In diesen Fällen legt die Option disambiguation fest, welcher Zeitpunkt gewählt wird oder ob ein Fehler geworfen wird. Das Ausgangsobjekt wird nicht verändert, denn Temporal-Objekte sind unveränderlich.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $timeZone Pflicht | string | Temporal.ZonedDateTime | IANA-Zeitzonenbezeichner wie "Europe/Berlin", "UTC" oder ein fester Versatz wie "+02:00". Bei einer Temporal.ZonedDateTime-Instanz wird deren Zeitzone übernommen. |
|
| $options | object | {} | Objekt mit der Eigenschaft disambiguation. Mögliche Werte: "compatible" (Standard; bei einer Lücke der spätere Zeitpunkt, bei einer Überlappung der frühere), "earlier", "later" und "reject" (wirft bei mehrdeutigen oder nicht existierenden Zeiten einen RangeError). |
Rückgabewert
Temporal.ZonedDateTime mit der Wanduhrzeit dieses Objekts in der angegebenen Zeitzone. Der Kalender wird übernommen.Beispiele
Termin in einer Zeitzone festlegen
const termin = Temporal.PlainDateTime.from("2025-06-15T09:00");
const zdt = termin.toZonedDateTime("Europe/Berlin");
console.log(zdt.toString());
console.log(zdt.toInstant().toString());
Meeting für Teilnehmer in anderen Zeitzonen anzeigen
const meeting = Temporal.PlainDateTime.from("2025-06-15T09:00")
.toZonedDateTime("Europe/Berlin");
for (const tz of ["America/New_York", "Asia/Tokyo"]) {
const lokal = meeting.withTimeZone(tz);
console.log(`${tz}: ${lokal.toPlainDateTime().toString()}`);
}
Sommerzeit-Lücke mit disambiguation behandeln
// Am 10.03.2024 springt die Uhr in New York von 02:00 auf 03:00
const luecke = Temporal.PlainDateTime.from("2024-03-10T02:30");
const tz = "America/New_York";
console.log(luecke.toZonedDateTime(tz).toString());
console.log(luecke.toZonedDateTime(tz, { disambiguation: "earlier" }).toString());
try {
luecke.toZonedDateTime(tz, { disambiguation: "reject" });
} catch (e) {
console.log(e.name);
}
Doppelte Uhrzeit beim Zurückstellen der Uhr
// Am 03.11.2024 gibt es 01:30 in New York zweimal
const doppelt = Temporal.PlainDateTime.from("2024-11-03T01:30");
console.log(doppelt.toZonedDateTime("America/New_York").offset);
console.log(doppelt.toZonedDateTime("America/New_York", { disambiguation: "later" }).offset);
// Wichtig · Fallstricke
- Browser-Unterstützung: Temporal gibt es bisher nur in Firefox (ab 139) und Chromium-Browsern (ab 144). Safari und ältere Node.js-Versionen brauchen einen Polyfill wie
@js-temporal/polyfill. - Veraltete Signatur: Frühere Entwürfe und Polyfills haben ein
Temporal.TimeZone-Objekt angenommen. Diese Klasse wurde entfernt. Übergib heute einen Zeitzonen-String. - Ungültige Zeitzonenbezeichner lösen einen
RangeErroraus, Werte vom falschen Typ einenTypeError. - Der Standard
\"compatible\"entspricht dem Verhalten vonDate. Er kann aber stillschweigend eine andere Uhrzeit liefern als eingegeben, zum Beispiel 03:30 statt 02:30. Wenn der genaue Zeitpunkt wichtig ist (Abrechnung, Terminplanung), verwende\"reject\"und behandle den Fehler selbst. - Feste Versätze wie
\"+01:00\"kennen keine Sommerzeit. Nimm für echte Orte immer IANA-Namen.