Signatur
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
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}`);
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)));
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')));
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
-120und nicht120. 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.DateTimeFormatmit der OptiontimeZoneoder künftigTemporal. - Einige Zeitzonen haben Offsets, die keine vollen Stunden sind, zum Beispiel Indien mit
-330oder Nepal mit-345. Teile deshalb nicht blind durch 60 und runde nicht einfach. - In Node.js kann die Zeitzone über die Umgebungsvariable
TZgesetzt 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.resistFingerprintingoder der Tor Browser) melden immer0. - Bei ungültigem Datum liefert die Methode
NaN.