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

Temporal.ZonedDateTime.prototype.offsetNanoseconds

Eigenschaft

Gibt den UTC-Offset eines <code>Temporal.ZonedDateTime</code> als ganze Zahl in Nanosekunden zurück, positiv östlich und negativ westlich von UTC.

seit JavaScript ES2026 (Temporal) – Firefox 139+, Chrome/Edge 144+ Kategorie: method-property

Signatur

get Temporal.ZonedDateTime.prototype.offsetNanoseconds

Beschreibung

Die schreibgeschützte Zugriffs-Eigenschaft offsetNanoseconds liefert den Offset, mit dem der interne exakte Zeitpunkt (epochNanoseconds) in die lokale Wanduhrzeit der Zeitzone umgerechnet wird. Der Wert ist eine ganze Zahl (number): positiv für Zeitzonen östlich von UTC (z. B. 7200000000000 für +02:00), negativ für westliche Zeitzonen und 0 für UTC.

Der Offset hängt vom konkreten Zeitpunkt ab, nicht nur von der Zeitzone. In Europe/Berlin liefert dieselbe Eigenschaft im Winter 3600000000000 (MEZ) und im Sommer 7200000000000 (MESZ). Damit lassen sich Sommerzeit-Umstellungen erkennen oder Offsets numerisch vergleichen und verrechnen.

Das Gegenstück ist die Eigenschaft offset, die denselben Wert als formatierten String wie "+02:00" liefert. Für Anzeige und Serialisierung ist offset meist die bessere Wahl, für Berechnungen offsetNanoseconds. Weil die Eigenschaft nur lesend ist, ändert man den Offset nicht direkt. Stattdessen nimmt man withTimeZone() oder with() mit der Option offset.

Rückgabewert

Typ
number
Beschreibung
Ganze Zahl in Nanosekunden, stets betragsmäßig kleiner als 86 400 000 000 000 (24 Stunden). Positiv = östlich von UTC, negativ = westlich, 0 = UTC.

Beispiele

Sommer- und Winterzeit in Berlin vergleichen

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.offsetNanoseconds); // MEZ
console.log(sommer.offsetNanoseconds); // MESZ
console.log(sommer.offsetNanoseconds > winter.offsetNanoseconds ? 'Sommerzeit aktiv' : 'Normalzeit');
3600000000000 7200000000000 Sommerzeit aktiv

Offset in Stunden und Minuten umrechnen

const zdt = Temporal.ZonedDateTime.from('2024-07-04T09:30[America/New_York]');

const ns = zdt.offsetNanoseconds;
const minuten = ns / 60_000_000_000;
const stunden = ns / 3_600_000_000_000;

console.log(ns);
console.log(`${minuten} Minuten / ${stunden} Stunden`);
console.log(zdt.offset); // String-Pendant
-14400000000000 -240 Minuten / -4 Stunden -04:00

Sommerzeit-Umstellung zwischen zwei Zeitpunkten erkennen

const hatOffsetWechsel = (a, b) => a.offsetNanoseconds !== b.offsetNanoseconds;

const vorher = Temporal.ZonedDateTime.from('2024-03-30T12:00[Europe/Berlin]');
const nachher = vorher.add({ days: 1 });

console.log(hatOffsetWechsel(vorher, nachher));
console.log(nachher.offsetNanoseconds - vorher.offsetNanoseconds); // 1 Stunde in ns
true 3600000000000

UTC und historische Offsets mit Sekundenanteil

const utc = Temporal.ZonedDateTime.from('2024-05-01T00:00[UTC]');
console.log(utc.offsetNanoseconds);

// Liberia nutzte bis 1972 den Offset -00:44:30
const monrovia = Temporal.ZonedDateTime.from('1950-01-01T12:00[Africa/Monrovia]');
console.log(monrovia.offsetNanoseconds);
console.log(monrovia.offset);
0 -2670000000000 -00:44:30

// Wichtig · Fallstricke

  • Nur lesend: Eine Zuweisung wie zdt.offsetNanoseconds = 0 hat keine Wirkung (im Strict Mode gibt es einen TypeError). Einen anderen Offset bekommt man über withTimeZone().
  • Offset ist nicht die Zeitzone: Aus dem Offset allein lässt sich die Zeitzone nicht ableiten. Viele Zeitzonen teilen sich zeitweise denselben Offset, und eine Zone kann ihren Offset im Lauf der Zeit ändern. Speichern Sie deshalb immer timeZoneId, nicht nur den Offset.
  • Genauigkeit: Der Wert ist eine number und kein bigint (anders als epochNanoseconds). Da der Betrag unter 24 Stunden bleibt, ist er immer exakt darstellbar.
  • Offsets mit Sekundenanteil: Historische Offsets (z. B. die Ortszeit LMT vor 1900) haben oft Sekundenanteile. Rechnen Sie also nicht fest damit, dass der Wert ein Vielfaches von Minuten ist. Welche historischen Daten verfügbar sind, hängt von der Zeitzonen-Datenbank der jeweiligen Engine ab.
  • Kompatibilität: Temporal ist noch nicht in allen Browsern verfügbar (Firefox ab 139, Chromium ab 144, Safari noch nicht). Für breite Unterstützung brauchen Sie ein Polyfill wie @js-temporal/polyfill oder temporal-polyfill. Prüfen Sie die Unterstützung mit typeof Temporal !== 'undefined'.