Start · Sprachen · JavaScript · Referenz · Temporal.ZonedDateTime.prototype.offset

Temporal.ZonedDateTime.prototype.offset

Eigenschaft

Liefert den UTC-Offset, mit dem der interne Zeitpunkt einer <code>Temporal.ZonedDateTime</code> in der Zeitzone ausgewertet wird, als String im Format <code>±HH:mm</code>.

seit JavaScript ES2026 (Temporal) – Firefox 139+, neuere Chromium- Kategorie: method-property

Signatur

get Temporal.ZonedDateTime.prototype.offset

Beschreibung

Die Accessor-Eigenschaft offset gibt den Abstand zwischen der lokalen Wanduhrzeit der Instanz und UTC als String zurück, zum Beispiel "+02:00" oder "-05:00". Dieser Wert hängt nicht nur von der Zeitzone ab, sondern auch vom konkreten Zeitpunkt: In Europe/Berlin ergibt sich im Winter "+01:00" und während der Sommerzeit "+02:00".

Normalerweise hat der String das Format ±HH:mm. Bei historischen Offsets, die nicht auf ganze Minuten fallen (etwa die lokale mittlere Ortszeit vor Einführung der Standardzeitzonen), kommen Sekunden und ggf. Sekundenbruchteile dazu: ±HH:mm:ss bzw. ±HH:mm:ss.sssssssss. Brauchst du den Offset zum Rechnen, nimm offsetNanoseconds. Diese Eigenschaft liefert denselben Wert als Zahl.

Nützlich ist offset vor allem beim Anzeigen von Zeitstempeln mit Offset, beim Erzeugen von RFC-3339-/ISO-8601-Strings für APIs und beim Auflösen mehrdeutiger Uhrzeiten während der Zeitumstellung. In der Rückstunde gibt es dieselbe Wanduhrzeit zweimal, und nur der Offset unterscheidet die beiden Zeitpunkte.

Die Eigenschaft ist schreibgeschützt, denn es gibt nur einen Getter. Um einen anderen Offset zu wählen, erzeugst du mit with({ offset }) und der Option offset eine neue Instanz. ZonedDateTime-Objekte sind unveränderlich.

Rückgabewert

Typ
string
Beschreibung
Der UTC-Offset als String im Format ±HH:mm, bei Offsets unterhalb einer Minute im Format ±HH:mm:ss bzw. ±HH:mm:ss.sssssssss. UTC ergibt "+00:00".

Beispiele

Winter- und Sommerzeit in Berlin

const winter = Temporal.ZonedDateTime.from("2024-01-15T12:00[Europe/Berlin]");
const sommer = Temporal.ZonedDateTime.from("2024-07-15T12:00[Europe/Berlin]");

console.log(winter.offset);
console.log(sommer.offset);
console.log(sommer.offsetNanoseconds / 3.6e12, "Stunden");
+01:00 +02:00 2 Stunden

Mehrdeutige Uhrzeit bei der Zeitumstellung unterscheiden

// Am 27.10.2024 gibt es 02:30 in Berlin zweimal
const frueh = Temporal.ZonedDateTime.from(
  "2024-10-27T02:30[Europe/Berlin]",
  { disambiguation: "earlier" }
);
const spaet = Temporal.ZonedDateTime.from(
  "2024-10-27T02:30[Europe/Berlin]",
  { disambiguation: "later" }
);

console.log(frueh.offset, spaet.offset);

// Offset gezielt wechseln (liefert eine neue Instanz)
const umgestellt = frueh.with({ offset: "+01:00" }, { offset: "prefer" });
console.log(umgestellt.offset, umgestellt.equals(spaet));
+02:00 +01:00 +01:00 true

Historischer Offset mit Sekunden und Zeitstempel für eine API

const alt = Temporal.ZonedDateTime.from("1900-01-01T00:00[Asia/Shanghai]");
console.log(alt.offset);

// RFC-3339-String ohne Zeitzonen-Annotation, z. B. für ein Backend
const jetzt = Temporal.ZonedDateTime.from("2024-03-10T09:15:00[America/New_York]");
const stamp = jetzt.toString({ timeZoneName: "never", smallestUnit: "second" });
console.log(jetzt.offset, stamp);
+08:05:43 -04:00 2024-03-10T09:15:00-04:00

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung wie zdt.offset = "+01:00" hat keine Wirkung und löst im Strict Mode einen TypeError aus. Einen anderen Offset setzt du mit zdt.with({ offset }, { offset: "prefer" | "reject" | "use" | "ignore" }).
  • Offset ist keine Zeitzone: Wenn du nur "+01:00" speicherst, fehlen die Regeln für die Sommerzeit. Für spätere Berechnungen speicherst du deshalb die IANA-Zeitzone (timeZoneId). Der Offset allein reicht nur, um einen Zeitpunkt eindeutig festzuhalten.
  • Sekunden-Offsets: Historische Daten können Offsets wie "+00:53:28" liefern. Parser, die strikt ±HH:mm erwarten, können daran scheitern.
  • Offset in Zeitzonen-Datenbanken: Das Ergebnis hängt von der IANA-Datenbank der Laufzeitumgebung ab. Bei neuen Regeländerungen können sich Browser und Node.js-Versionen daher unterscheiden.
  • Kompatibilität: Temporal ist erst in neueren Engines verfügbar (Firefox ab 139, neuere Chromium-Versionen). Safari und ältere Umgebungen brauchen einen Polyfill wie @js-temporal/polyfill. Prüfe die Unterstützung mit typeof Temporal !== "undefined".