Signatur
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 vorhandenhourCycle,hour12– nur wenn eine Stundenkomponente formatiert wirdweekday,era,year,month,day,dayPeriod,hour,minute,second,fractionalSecondDigits,timeZoneName– nur die Komponenten, die tatsächlich ausgegeben werdendateStyle,timeStyle– falls verwendet (dann fehlen die einzelnen Komponenten)
Das Objekt ist eine frische Kopie: Änderungen daran beeinflussen den Formatierer nicht.
Rückgabewert
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);
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());
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}`);
}
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'));
// 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:
hourCycleundhour12existieren nur, wenn eine Stunde formatiert wird. Ohne Optionen enthält das Ergebnis standardmäßig nuryear,monthundday. Vor dem Zugriff also aufundefinedprüfen. - dateStyle/timeStyle: Werden diese genutzt, erscheinen die einzelnen Komponenten (
year,hour…) nicht im Ergebnis. - Zeitzone: Ältere Browser (vor ca. 2017) lieferten für
timeZoneteilweiseundefined. Auf Systemen mit Datenschutzeinstellungen (z. B. Firefox mitresistFingerprinting, 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.