Signatur
Beschreibung
Die Methode getTimeZoneTransition() sucht ausgehend vom Zeitpunkt der Instanz den nächsten ("next") oder vorherigen ("previous") Zeitzonenwechsel. Ein Wechsel ist jede Änderung des UTC-Offsets, also typischerweise die Umstellung auf oder von Sommerzeit, aber auch historische oder politisch bedingte Änderungen des Standard-Offsets.
Das Ergebnis ist ein neues Temporal.ZonedDateTime in derselben Zeitzone und demselben Kalender. Es steht für den ersten exakten Zeitpunkt, an dem schon der neue Offset gilt. Bei der Sommerzeit-Umstellung in Berlin am 31.03.2024 ist das zum Beispiel 2024-03-31T03:00:00+02:00[Europe/Berlin], weil die Uhrzeiten zwischen 02:00 und 03:00 an diesem Tag gar nicht vorkommen.
Gibt es in der gewünschten Richtung keinen Wechsel, liefert die Methode null. Das gilt für UTC, für feste Offsets wie "+05:30" und für Zeitzonen, die ihre Umstellungen dauerhaft abgeschafft haben (in Richtung "next"). Praktisch ist die Methode für Hinweise wie „Die Uhr wird in 3 Tagen umgestellt“, für Kalender- und Planungsanwendungen und zum Prüfen, ob ein Zeitraum eine Umstellung enthält.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $direction Pflicht | "next" | "previous" | { direction: "next" | "previous" } | Suchrichtung. Entweder direkt als String oder als Optionsobjekt mit der Eigenschaft direction. "next" sucht den ersten Wechsel nach dem Zeitpunkt der Instanz, "previous" den letzten Wechsel davor. |
Rückgabewert
Temporal.ZonedDateTime für den ersten Zeitpunkt mit dem neuen Offset, oder null, wenn es in dieser Richtung keinen Wechsel gibt.Beispiele
Nächste und vorherige Sommerzeit-Umstellung finden
const jetzt = Temporal.ZonedDateTime.from('2024-01-15T12:00[Europe/Berlin]');
const naechste = jetzt.getTimeZoneTransition('next');
const vorherige = jetzt.getTimeZoneTransition({ direction: 'previous' });
console.log(naechste?.toString());
console.log(vorherige?.toString());
Zeitzonen ohne Umstellung liefern null
const utc = Temporal.ZonedDateTime.from('2024-06-01T12:00[UTC]');
const fest = Temporal.ZonedDateTime.from('2024-06-01T12:00+05:30[+05:30]');
console.log(utc.getTimeZoneTransition('next'));
console.log(fest.getTimeZoneTransition('previous'));
Alle Umstellungen eines Jahres auflisten
const umstellungenImJahr = (jahr, zeitzone) => {
const ende = Temporal.ZonedDateTime.from({ year: jahr + 1, month: 1, day: 1, timeZone: zeitzone });
let zdt = Temporal.ZonedDateTime.from({ year: jahr, month: 1, day: 1, timeZone: zeitzone });
const ergebnis = [];
while ((zdt = zdt.getTimeZoneTransition('next')) &&
Temporal.ZonedDateTime.compare(zdt, ende) < 0) {
ergebnis.push(`${zdt.toPlainDate()} → Offset ${zdt.offset}`);
}
return ergebnis;
};
console.log(umstellungenImJahr(2024, 'Europe/Berlin'));
Nutzer vor einer bevorstehenden Zeitumstellung warnen
const jetzt = Temporal.Now.zonedDateTimeISO('Europe/Berlin');
const wechsel = jetzt.getTimeZoneTransition('next');
if (wechsel) {
const tage = jetzt.until(wechsel, { largestUnit: 'day' }).days;
if (tage <= 7) {
console.log(`Achtung: In ${tage} Tag(en) wird die Uhr umgestellt (neuer Offset ${wechsel.offset}).`);
}
}
// Wichtig · Fallstricke
- Das Argument ist Pflicht: Ohne Argument wirft die Methode einen
TypeError, bei einem ungültigen Wert wie"forward"einenRangeError. - Immer auf
nullprüfen, bevor du mit dem Ergebnis weiterrechnest. Optional Chaining (?.) ist hier praktisch. - Die Suche schließt den Ausgangszeitpunkt aus: Liegt die Instanz genau auf einem Wechsel, liefert
"next"den darauf folgenden Wechsel und"previous"den davor. - Es zählen nur Änderungen des UTC-Offsets. Ändert sich nur der Name oder die Abkürzung einer Zeitzone, wird das nicht als Wechsel gemeldet.
- Die Ergebnisse hängen von der Zeitzonen-Datenbank (IANA tzdata) der Laufzeitumgebung ab. Künftige Umstellungen können sich durch politische Entscheidungen noch ändern.
- In älteren Entwürfen von Temporal gab es dafür
Temporal.TimeZone.prototype.getNextTransition()undgetPreviousTransition(). Beide wurden zusammen mitTemporal.TimeZoneentfernt. - Kompatibilität: Temporal ist noch nicht in allen Browsern verfügbar. Für eine breite Unterstützung brauchst du ein Polyfill wie
@js-temporal/polyfillodertemporal-polyfill.