Signatur
Beschreibung
withTimeZone() rechnet ein Temporal.ZonedDateTime in eine andere Zeitzone um. Der Zeitpunkt bleibt dabei gleich, epochNanoseconds ändert sich also nicht. Neu berechnet werden die lokale Uhrzeit und der UTC-Versatz. Die Methode beantwortet also Fragen wie „Wie spät ist es in New York, wenn es in Berlin 15 Uhr ist?“.
Das ursprüngliche Objekt bleibt unverändert, denn alle Temporal-Objekte sind unveränderlich. Auch der Kalender (z. B. iso8601) wird übernommen. Wenn du den Kalender wechseln willst, nimm withCalendar().
Das Gegenstück ist toPlainDateTime().toZonedDateTime(zone): Hier bleibt die Uhrzeit auf der Uhr gleich, und es entsteht ein anderer Zeitpunkt. Praktisch heißt das: Mit withTimeZone() rechnest du Termine für Teilnehmende in anderen Zeitzonen um. Mit dem zweiten Weg verschiebst du einen Termin, der „um 9 Uhr Ortszeit“ stattfindet, in eine andere Zone.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $timeZone Pflicht | string | Temporal.ZonedDateTime | Die Zielzeitzone. Als Zeichenkette sind drei Formen erlaubt: ein IANA-Bezeichner (z. B. "America/New_York"), ein fester Versatz (z. B. "+05:30") oder ein Datum-Zeit-String mit Zeitzonen-Angabe. Übergibst du ein Temporal.ZonedDateTime, wird dessen Zeitzone verwendet. |
Rückgabewert
Temporal.ZonedDateTime mit demselben Zeitpunkt und Kalender in der angegebenen Zeitzone.Beispiele
Meeting-Zeit für andere Zeitzonen umrechnen
const meeting = Temporal.ZonedDateTime.from("2024-03-15T15:00[Europe/Berlin]");
const newYork = meeting.withTimeZone("America/New_York");
const tokio = meeting.withTimeZone("Asia/Tokyo");
console.log(newYork.toString());
console.log(tokio.toString());
Gleicher Zeitpunkt, aber nicht equals()
const berlin = Temporal.ZonedDateTime.from("2024-03-15T15:00[Europe/Berlin]");
const ny = berlin.withTimeZone("America/New_York");
// Der Zeitpunkt ist identisch …
console.log(berlin.epochNanoseconds === ny.epochNanoseconds);
console.log(Temporal.ZonedDateTime.compare(berlin, ny));
// … equals() prüft aber auch die Zeitzone
console.log(berlin.equals(ny));
withTimeZone() im Vergleich zum Beibehalten der Uhrzeit
const start = Temporal.ZonedDateTime.from("2024-03-15T15:00[Europe/Berlin]");
// Gleicher Zeitpunkt, andere Uhrzeit
const umgerechnet = start.withTimeZone("America/New_York");
// Gleiche Uhrzeit, anderer Zeitpunkt
const gleicheUhrzeit = start.toPlainDateTime().toZonedDateTime("America/New_York");
console.log(umgerechnet.toString());
console.log(gleicheUhrzeit.toString());
Fester Versatz und Zeitzone eines anderen Objekts
const utc = Temporal.ZonedDateTime.from("2024-03-15T14:00[UTC]");
console.log(utc.withTimeZone("+05:30").toString());
// Zeitzone eines anderen ZonedDateTime übernehmen
const referenz = Temporal.ZonedDateTime.from("2024-01-01T00:00[Australia/Sydney]");
console.log(utc.withTimeZone(referenz).toString());
// Wichtig · Fallstricke
- Browser-Kompatibilität: Temporal ist noch recht neu (Firefox 139+, Chrome/Edge 144+). Safari und ältere Node.js-Versionen unterstützen es noch nicht. Für produktiven Einsatz ist dort ein Polyfill wie
@js-temporal/polyfillnötig. - Ein unbekannter Zeitzonen-Bezeichner (z. B.
\"Europe/Atlantis\") löst einenRangeErroraus. Andere Typen als String oderTemporal.ZonedDateTimelösen einenTypeErroraus. - Die Methode ändert nie den Zeitpunkt. Wenn du die Ortszeit beibehalten willst, nimm
toPlainDateTime().toZonedDateTime(zone). - Ein fester Versatz wie
\"+02:00\"kennt keine Sommerzeit. Für echte Orte solltest du deshalb IANA-Bezeichner verwenden, damit spätere Berechnungen mitadd()oderwith()Zeitumstellungen korrekt berücksichtigen. equals()gibt nach einem Zeitzonenwechselfalsezurück, obwohl der Zeitpunkt gleich ist. Für einen reinen Zeitpunktvergleich nimmTemporal.ZonedDateTime.compare()oder vergleicheepochNanoseconds.- Wenn du ein Datum nur in einer anderen Zone anzeigen willst, reicht oft
toLocaleString(locale, { timeZone }).