Start · Sprachen · JavaScript · Referenz · Date.prototype.getTimezoneOffset()

Date.prototype.getTimezoneOffset()

Methode

Liefert die Differenz in Minuten zwischen UTC und der lokalen Zeitzone für das jeweilige Datum. Das Ergebnis ist positiv, wenn die lokale Zeit hinter UTC liegt.

seit JavaScript ES1 (Baseline: alle Browser) Kategorie: method-property

Signatur

Date.prototype.getTimezoneOffset()

Beschreibung

Die Methode getTimezoneOffset() gibt die Anzahl der Minuten zurück, die man zur lokalen Zeit addieren muss, um UTC zu erhalten. Formal gilt: UTC − Lokalzeit. Deshalb ist das Vorzeichen umgekehrt zur üblichen Schreibweise: In Mitteleuropa (UTC+1) liefert die Methode -60, in New York (UTC−5) dagegen 300.

Der Wert gilt immer für das konkrete Datum der Instanz. Weil Sommer- und Winterzeit wechseln, kann dasselbe Programm für Januar -60 und für Juli -120 zurückgeben. Auch historische Änderungen einer Zeitzone berücksichtigt die Methode, sofern die Zeitzonendaten der Laufzeitumgebung sie enthalten.

Einsatzgebiete sind zum Beispiel: eine lokale Zeit als ISO-String mit Offset (+02:00) formatieren, erkennen, ob gerade Sommerzeit gilt, oder den Offset an einen Server schicken. Wenn du Zeitzonen per Name brauchst (etwa "Europe/Berlin"), nimm besser Intl.DateTimeFormat().resolvedOptions().timeZone. Die Methode liefert nur einen Zahlenwert und keine Zeitzonen-Kennung.

Rückgabewert

Typ
number
Beschreibung
Differenz in Minuten zwischen UTC und lokaler Zeit (UTC − lokal) für dieses Datum. Positiv westlich von UTC, negativ östlich davon. Bei ungültigem Datum (new Date("x")) ist das Ergebnis NaN.

Beispiele

Aktuellen Offset in Stunden anzeigen

// Ausführung in der Zeitzone Europe/Berlin im Sommer
const offsetMin = new Date().getTimezoneOffset();
const offsetStd = -offsetMin / 60; // Vorzeichen umdrehen
console.log(offsetMin);
console.log(`UTC${offsetStd >= 0 ? '+' : ''}${offsetStd}`);
-120 UTC+2

Sommerzeit erkennen

// Gilt für die Nordhalbkugel und die Südhalbkugel
const istSommerzeit = (date) => {
  const jahr = date.getFullYear();
  const jan = new Date(jahr, 0, 1).getTimezoneOffset();
  const jul = new Date(jahr, 6, 1).getTimezoneOffset();
  // Standardzeit hat den größeren Offset-Wert
  return date.getTimezoneOffset() < Math.max(jan, jul);
};

// in Europe/Berlin:
console.log(istSommerzeit(new Date(2024, 6, 15)));
console.log(istSommerzeit(new Date(2024, 0, 15)));
true false

Lokalen ISO-String mit Offset erzeugen

const toLocalISOString = (date) => {
  const off = -date.getTimezoneOffset();
  const sign = off >= 0 ? '+' : '-';
  const pad = (n) => String(Math.floor(Math.abs(n))).padStart(2, '0');
  const lokal = new Date(date.getTime() + off * 60_000);
  return lokal.toISOString().slice(0, 19) +
    `${sign}${pad(off / 60)}:${pad(off % 60)}`;
};

// in Europe/Berlin:
console.log(toLocalISOString(new Date('2024-07-01T10:00:00Z')));
2024-07-01T12:00:00+02:00

Offset an eine API mitsenden

const sendeTermin = async (termin) => {
  const res = await fetch('/api/termine', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      zeitpunkt: termin.toISOString(),
      offsetMinuten: termin.getTimezoneOffset(),
      zeitzone: Intl.DateTimeFormat().resolvedOptions().timeZone
    })
  });
  return res.json();
};

// Wichtig · Fallstricke

  • Umgekehrtes Vorzeichen: UTC+2 ergibt -120 und nicht 120. Das ist die häufigste Fehlerquelle.
  • Nicht konstant: Der Offset hängt vom Datum ab (Sommerzeit, historische Änderungen). Speichere nicht einen Offset aus der Gegenwart, um ihn später für beliebige Daten zu verwenden.
  • Die Methode wertet immer nur die Zeitzone des Systems bzw. der Laufzeitumgebung aus. Den Offset einer beliebigen anderen Zone liefert sie nicht. Dafür eignet sich Intl.DateTimeFormat mit der Option timeZone oder künftig Temporal.
  • Einige Zeitzonen haben Offsets, die keine vollen Stunden sind, zum Beispiel Indien mit -330 oder Nepal mit -345. Teile deshalb nicht blind durch 60 und runde nicht einfach.
  • In Node.js kann die Zeitzone über die Umgebungsvariable TZ gesetzt werden, z. B. TZ=UTC node app.js. Das ist praktisch für reproduzierbare Tests.
  • Browser mit Schutz vor Fingerprinting (z. B. Firefox mit privacy.resistFingerprinting oder der Tor Browser) melden immer 0.
  • Bei ungültigem Datum liefert die Methode NaN.