Start · Sprachen · JavaScript · Referenz · Temporal.PlainDateTime.prototype.toZonedDateTime()

Temporal.PlainDateTime.prototype.toZonedDateTime()

Methode

Wandelt ein <code>Temporal.PlainDateTime</code> in ein <code>Temporal.ZonedDateTime</code> um, indem Datum und Uhrzeit in einer angegebenen Zeitzone verortet werden.

seit JavaScript ES2026 (Temporal); Firefox 139+, Chrome 144+, Safa Kategorie: method-property

Signatur

Temporal.PlainDateTime.prototype.toZonedDateTime(timeZone, options)

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

Typ
Temporal.ZonedDateTime
Beschreibung
Ein neues 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());
2025-06-15T09:00:00+02:00[Europe/Berlin] 2025-06-15T07:00:00Z

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()}`);
}
America/New_York: 2025-06-15T03:00:00 Asia/Tokyo: 2025-06-15T16:00:00

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);
}
2024-03-10T03:30:00-04:00[America/New_York] 2024-03-10T01:30:00-05:00[America/New_York] RangeError

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);
-04:00 -05:00

// 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 RangeError aus, Werte vom falschen Typ einen TypeError.
  • Der Standard \"compatible\" entspricht dem Verhalten von Date. 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.