Start · Sprachen · JavaScript · Referenz · Intl.Locale.prototype.getTimeZones()

Intl.Locale.prototype.getTimeZones()

Methode

Gibt ein alphabetisch sortiertes Array der IANA-Zeitzonenbezeichner zurück, die in der Region der Locale gelten, oder <code>undefined</code>, wenn die Locale keine Region angibt.

seit JavaScript Intl Locale Info (TC39-Vorschlag, Stufe 3) – Chrom Kategorie: method-property

Signatur

Intl.Locale.prototype.getTimeZones()

Beschreibung

Mit getTimeZones() erfahren Sie, welche Zeitzonen in der Region einer Intl.Locale gelten. Die Methode liefert IANA-Bezeichner wie "Europe/Berlin" oder "America/New_York". Diese Werte können Sie direkt an Intl.DateTimeFormat (Option timeZone) oder an Date.prototype.toLocaleString() übergeben.

Entscheidend ist nur das Regions-Subtag der Locale, zum Beispiel US in en-US oder DE in de-DE. Fehlt die Region, etwa bei new Intl.Locale("de"), gibt die Methode undefined zurück und kein leeres Array. Bei jedem Aufruf erhalten Sie ein neues Array, das Sie ohne Folgen verändern können.

Typische Anwendungen:

  • Vorschläge für eine Zeitzonen-Auswahl in Formularen, passend zum Land des Benutzers
  • Prüfen, ob eine Region mehrere Zeitzonen hat, zum Beispiel die USA, Russland oder Australien
  • Einen sinnvollen Standardwert vorbelegen, wenn die Region nur eine Zeitzone hat

Die Methode ersetzt die ältere Getter-Eigenschaft Intl.Locale.prototype.timeZones, die einige Browser vorab eingeführt hatten.

Rückgabewert

Typ
string[] | undefined
Beschreibung
Ein alphabetisch sortiertes Array von IANA-Zeitzonenbezeichnern für die Region der Locale. Hat die Locale kein Regions-Subtag, wird undefined zurückgegeben.

Beispiele

Zeitzonen einzelner Länder abfragen

const de = new Intl.Locale("de-DE");
console.log(de.getTimeZones());

const jp = new Intl.Locale("ja-JP");
console.log(jp.getTimeZones());

// Ohne Region gibt es kein Ergebnis
const nurSprache = new Intl.Locale("de");
console.log(nurSprache.getTimeZones());
["Europe/Berlin", "Europe/Busingen"] ["Asia/Tokyo"] undefined

Zeitzonen-Auswahl für ein Formular füllen

const fuelleZeitzonenAuswahl = (select, localeTag) => {
  const locale = new Intl.Locale(localeTag);
  const zonen = locale.getTimeZones?.() ?? [];

  select.replaceChildren(
    ...zonen.map((zone) => new Option(zone.replaceAll("_", " "), zone))
  );

  // Nur eine Zone bekannt: direkt vorauswählen
  if (zonen.length === 1) select.value = zonen[0];
};

fuelleZeitzonenAuswahl(document.querySelector("#zeitzone"), "en-US");

Uhrzeit in allen Zeitzonen eines Landes anzeigen, mit Rückfall auf den alten Getter

const holeZeitzonen = (locale) =>
  typeof locale.getTimeZones === "function"
    ? locale.getTimeZones()
    : locale.timeZones; // alter, veralteter Getter

const locale = new Intl.Locale("en-AU");
const jetzt = new Date();

for (const timeZone of holeZeitzonen(locale) ?? []) {
  const zeit = jetzt.toLocaleTimeString("de-DE", {
    timeZone,
    hour: "2-digit",
    minute: "2-digit",
  });
  console.log(`${timeZone}: ${zeit}`);
}
Australia/Adelaide: 20:30 Australia/Brisbane: 20:00 … (je nach aktueller Uhrzeit)

// Wichtig · Fallstricke

  • Browser-Unterstützung: Die Methode stammt aus dem TC39-Vorschlag „Intl Locale Info“. Chrome/Edge unterstützen sie ab Version 130, Safari ab 17. Firefox unterstützt sie derzeit nicht. Ältere Chromium-Versionen (ab 99) kennen nur den Getter timeZones, der inzwischen als veraltet gilt. Prüfen Sie deshalb vor dem Aufruf, ob die Methode vorhanden ist, zum Beispiel mit locale.getTimeZones?.().
  • Rückgabewert undefined: Ohne Regions-Subtag gibt es kein Array. Setzen Sie einen Standardwert (?? []), bevor Sie .map() oder .length verwenden.
  • Region statt Sprache: en-DE liefert deutsche Zeitzonen, de-AT österreichische. Die Sprache spielt keine Rolle.
  • Bezeichner können veraltet sein: Je nach Engine und ICU-Version kommen auch ältere IANA-Namen vor, zum Beispiel "Asia/Calcutta" statt "Asia/Kolkata". Vergleichen Sie Bezeichner deshalb nicht mit fest eingetragenen Zeichenketten.
  • Datenstand: Die Liste stammt aus den CLDR-/ICU-Daten des Browsers. Sie kann sich zwischen Versionen ändern und nennt nicht unbedingt jede historische IANA-Zone.
  • Die Zeitzone des Benutzers selbst ermitteln Sie mit Intl.DateTimeFormat().resolvedOptions().timeZone. Alle unterstützten Zeitzonen unabhängig vom Land liefert Intl.supportedValuesOf("timeZone").