Signatur
Beschreibung
resolvedOptions() zeigt, mit welchen Einstellungen ein Intl.DurationFormat-Objekt tatsächlich arbeitet. Das kann von dem abweichen, was du dem Konstruktor übergeben hast: Die Locale wird mit den vom System unterstützten Locales abgeglichen, fehlende Optionen werden durch Standardwerte ergänzt und die Stile der einzelnen Einheiten werden aus dem Gesamtstil (style) abgeleitet.
Das zurückgegebene Objekt enthält unter anderem:
locale– die ausgehandelte BCP-47-Sprachkennung, z. B."de-DE"numberingSystem– das Zahlensystem, z. B."latn"style–"long","short"(Standard),"narrow"oder"digital"- für jede Einheit (
years,months,weeks,days,hours,minutes,seconds,milliseconds,microseconds,nanoseconds) den Stil der Einheit sowie die zugehörige…Display-Eigenschaft ("auto"oder"always") fractionalDigits– nur vorhanden, wenn die Option beim Erzeugen gesetzt wurde
Typische Einsatzzwecke sind Debugging („Warum wird die Stunde nicht angezeigt?“), das Prüfen, ob eine gewünschte Locale verfügbar ist, und das Weiterreichen bzw. Klonen einer Konfiguration an einen zweiten Formatierer.
Jeder Aufruf liefert ein neues Objekt. Änderungen daran wirken sich nicht auf den Formatierer aus.
Rückgabewert
locale, numberingSystem, style, den Einheiten-Stilen und …Display-Werten sowie optional fractionalDigits.Beispiele
Aufgelöste Grundoptionen auslesen
const df = new Intl.DurationFormat("de-DE", { style: "long" });
const opts = df.resolvedOptions();
console.log(opts.locale);
console.log(opts.style);
console.log(opts.hours, opts.hoursDisplay);
console.log(df.format({ hours: 1, minutes: 30 }));
Abgeleitete Stile im Digital-Modus prüfen
const clock = new Intl.DurationFormat("en", { style: "digital" });
const { hours, minutes, seconds, hoursDisplay } = clock.resolvedOptions();
console.log(hours, minutes, seconds);
console.log(hoursDisplay);
console.log(clock.format({ hours: 2, minutes: 5, seconds: 9 }));
Locale-Fallback erkennen
// Prüfen, ob die gewünschte Locale wirklich unterstützt wird
const wunsch = "xx-YY";
const df = new Intl.DurationFormat([wunsch, "de"]);
const { locale } = df.resolvedOptions();
if (locale !== wunsch) {
console.warn(`Fallback aktiv: ${locale} statt ${wunsch}`);
}
Konfiguration auf zweiten Formatierer übertragen
const original = new Intl.DurationFormat("fr", { style: "narrow", daysDisplay: "always" });
const { locale, ...optionen } = original.resolvedOptions();
// Gleiche Optionen, andere Sprache
const kopie = new Intl.DurationFormat("de", optionen);
console.log(kopie.resolvedOptions().daysDisplay);
// Wichtig · Fallstricke
- Kompatibilität:
Intl.DurationFormatist recht neu (ES2025). In älteren Browsern und Node.js-Versionen vor 23 fehlt es – vorher mittypeof Intl.DurationFormat === "function"prüfen oder ein Polyfill (z. B.@formatjs/intl-durationformat) einsetzen. - Die zurückgegebenen Werte hängen von den ICU-/CLDR-Daten der Laufzeitumgebung ab. Insbesondere
localekann je nach Browser unterschiedlich ausgehandelt werden – nicht fest im Code voraussetzen. - Einheiten-Stile werden aus
styleabgeleitet: Bei"digital"werden Stunden, Minuten und Sekunden numerisch mit…Display: "always"aufgelöst, bei den anderen Stilen übernehmen die Einheiten den Gesamtstil mit"auto". fractionalDigitsfehlt im Ergebnis, wenn es nicht explizit gesetzt wurde. Mit"fractionalDigits" in optsprüfen statt auf einen Standardwert zu vertrauen.- Wird die Methode nicht auf einer echten
Intl.DurationFormat-Instanz aufgerufen (z. B. percallmit einem anderen Objekt), wirft sie einenTypeError.