Start · Sprachen · JavaScript · Referenz · Intl.DateTimeFormat.prototype.resolvedOptions()

Intl.DateTimeFormat.prototype.resolvedOptions()

Methode

Gibt ein neues Objekt mit den tatsächlich verwendeten (aufgelösten) Optionen eines <code>Intl.DateTimeFormat</code>-Objekts zurück, etwa Locale, Kalender und Zeitzone.

seit JavaScript ES2015 (ECMA-402 2. Ausgabe) – Baseline: alle Brow Kategorie: method-property

Signatur

Intl.DateTimeFormat.prototype.resolvedOptions()

Beschreibung

resolvedOptions() zeigt, welche Einstellungen ein Intl.DateTimeFormat-Objekt nach der Initialisierung wirklich verwendet. Die übergebenen Optionen sind oft nur Wünsche: Die Engine gleicht die angeforderte Locale mit den verfügbaren Locales ab, ergänzt Standardwerte und legt Kalender, Zahlensystem und Zeitzone fest. Das Ergebnis dieser Auflösung erhältst du als einfaches Objekt.

Am häufigsten wird die Methode genutzt, um die Zeitzone des Benutzers zu ermitteln: Intl.DateTimeFormat().resolvedOptions().timeZone liefert einen IANA-Bezeichner wie "Europe/Berlin". Sie eignet sich außerdem, um die Standard-Locale des Systems auszulesen, zu prüfen, ob eine gewünschte Locale unterstützt wird, oder um festzustellen, ob 12- oder 24-Stunden-Format gilt (hourCycle, hour12).

Das zurückgegebene Objekt kann unter anderem folgende Eigenschaften enthalten:

  • locale, calendar, numberingSystem, timeZone – immer vorhanden
  • hourCycle, hour12 – nur wenn eine Stundenkomponente formatiert wird
  • weekday, era, year, month, day, dayPeriod, hour, minute, second, fractionalSecondDigits, timeZoneName – nur die Komponenten, die tatsächlich ausgegeben werden
  • dateStyle, timeStyle – falls verwendet (dann fehlen die einzelnen Komponenten)

Das Objekt ist eine frische Kopie: Änderungen daran beeinflussen den Formatierer nicht.

Rückgabewert

Typ
Object
Beschreibung
Ein neues Objekt mit den aufgelösten Optionen (u. a. locale, calendar, numberingSystem, timeZone sowie die verwendeten Datums-/Zeitkomponenten bzw. dateStyle/timeStyle).

Beispiele

Zeitzone und Locale des Benutzers ermitteln

const { timeZone, locale } = new Intl.DateTimeFormat().resolvedOptions();
console.log(timeZone);
console.log(locale);
Europe/Berlin de-DE

Aufgelöste Optionen eines konfigurierten Formatierers

const fmt = new Intl.DateTimeFormat('de-DE', {
  year: 'numeric',
  month: 'long',
  day: '2-digit',
  hour: 'numeric',
  minute: '2-digit',
  timeZone: 'America/New_York'
});

console.log(fmt.resolvedOptions());
{ locale: 'de-DE', calendar: 'gregory', numberingSystem: 'latn', timeZone: 'America/New_York', hourCycle: 'h23', hour12: false, year: 'numeric', month: 'long', day: '2-digit', hour: '2-digit', minute: '2-digit' }

Prüfen, ob eine Locale unterstützt wird (Fallback erkennen)

const wunsch = 'tlh'; // Klingonisch – meist nicht verfügbar
const { locale } = new Intl.DateTimeFormat(wunsch).resolvedOptions();

if (!locale.startsWith(wunsch)) {
  console.log(`Fallback aktiv: ${locale}`);
}
Fallback aktiv: de-DE

12- oder 24-Stunden-Format für UI-Auswahl erkennen

const uses12h = (locale) =>
  new Intl.DateTimeFormat(locale, { hour: 'numeric' }).resolvedOptions().hour12;

console.log(uses12h('en-US'));
console.log(uses12h('de-DE'));
true false

// Wichtig · Fallstricke

  • Aufgelöst ≠ angefordert: Werte können von den übergebenen Optionen abweichen, z. B. wird hour: 'numeric' in manchen Locales zu '2-digit', und eine nicht verfügbare Locale fällt auf die Standard-Locale zurück.
  • Optionale Eigenschaften fehlen: hourCycle und hour12 existieren nur, wenn eine Stunde formatiert wird. Ohne Optionen enthält das Ergebnis standardmäßig nur year, month und day. Vor dem Zugriff also auf undefined prüfen.
  • dateStyle/timeStyle: Werden diese genutzt, erscheinen die einzelnen Komponenten (year, hour …) nicht im Ergebnis.
  • Zeitzone: Ältere Browser (vor ca. 2017) lieferten für timeZone teilweise undefined. Auf Systemen mit Datenschutzeinstellungen (z. B. Firefox mit resistFingerprinting, Tor) wird bewusst "UTC" zurückgegeben – nicht blind darauf verlassen, bei Bedarf serverseitig oder per Benutzerwahl absichern.
  • Die Zeitzone wird zur Erzeugungszeit festgelegt; ändert der Benutzer die Systemzeitzone, muss ein neuer Formatierer erstellt werden.
  • Die Ergebnisse können je nach Engine und ICU-Version leicht variieren; für Tests keine exakten Objektvergleiche über Umgebungen hinweg verwenden.