Start · Sprachen · JavaScript · Referenz · Intl.DurationFormat

Intl.DurationFormat

Klasse

Formatiert Zeitdauern (Stunden, Minuten, Sekunden usw.) sprachsensitiv und lokalisiert gemäß dem <code>Intl</code>-Standard.

seit JavaScript ES2024 / Baseline: moderne Browser (ab 2024) Kategorie: core

Signatur

class Intl.DurationFormat

Beschreibung

Intl.DurationFormat ist Teil der ECMAScript-Internationalisierungs-API und ermöglicht die lokalisierte Darstellung von Zeitdauern – etwa „3 Stunden, 25 Minuten und 10 Sekunden" auf Deutsch oder „3 hr., 25 min., 10 sec." auf Englisch. Damit entfällt die Notwendigkeit, Einheiten und Trennzeichen manuell zu übersetzen oder Bibliotheken einzubinden.

Eine Dauer wird als einfaches Objekt mit numerischen Feldern wie years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds und nanoseconds übergeben. Felder, die nicht angegeben werden, werden ignoriert. Negative Werte werden unterstützt, um z. B. vergangene Zeiträume auszudrücken.

Über den Konstruktor lassen sich Locale und Optionen wie der style ("long", "short", "narrow", "digital") sowie granulare Einheitenstile und die gewünschte fractionalDigits-Präzision steuern. Die Methode format() gibt einen fertig lokalisierten String zurück, während formatToParts() die einzelnen Tokens als Array liefert – nützlich für benutzerdefiniertes Styling.

Wann verwenden? Immer dann, wenn Zeitdauern (Timer, Countdowns, Laufzeiten, Altersdifferenzen) für Endnutzer lesbar und sprachgerecht dargestellt werden sollen – ohne eigene Übersetzungstabellen pflegen zu müssen.

Parameter

Name Typ Default Beschreibung
$locales string | string[] Systemsprache des Browsers/Laufzeit Ein BCP-47-Sprach-Tag (z. B. "de", "en-US", "fr-FR") oder ein Array davon. Der beste verfügbare Locale wird automatisch ausgewählt.
$options object {} Optionsobjekt zur Steuerung der Formatierung. Wichtige Felder:
  • style: "long" (Standard), "short", "narrow", "digital" – legt den allgemeinen Darstellungsstil fest.
  • years, months, weeks, days, hours, minutes, seconds: Individueller Stil pro Einheit ("long" | "short" | "narrow" | "numeric" | "2-digit").
  • fractionalDigits: Anzahl der Nachkommastellen bei Sekunden (0–9).
  • localeMatcher: "best fit" (Standard) oder "lookup".

Rückgabewert

Typ
Intl.DurationFormat
Beschreibung
Eine neue Intl.DurationFormat-Instanz, die über format() und formatToParts() genutzt werden kann.

Beispiele

Einfache Dauer auf Deutsch formatieren

const formatter = new Intl.DurationFormat("de", { style: "long" });

const dauer = {
  hours: 3,
  minutes: 25,
  seconds: 10,
};

console.log(formatter.format(dauer));
3 Stunden, 25 Minuten und 10 Sekunden

Digitaler Stil (Uhr-Format) auf Englisch

const clockFormatter = new Intl.DurationFormat("en", { style: "digital" });

console.log(clockFormatter.format({ hours: 1, minutes: 8, seconds: 5 }));
1:08:05

formatToParts() für benutzerdefiniertes Rendering

const formatter = new Intl.DurationFormat("de", { style: "short" });

const parts = formatter.formatToParts({ minutes: 90, seconds: 45 });
console.log(parts);

// Nur die Werte ausgeben
const values = parts
  .filter(p => p.type === "integer")
  .map(p => p.value);
console.log(values);
[ { type: 'integer', value: '90', unit: 'minute' }, { type: 'literal', value: ' Min., ' }, { type: 'integer', value: '45', unit: 'second' }, { type: 'literal', value: ' Sek.' } ] ["90", "45"]

Mehrere Locales im Vergleich

const duration = { hours: 2, minutes: 30 };

for (const locale of ["de", "en-US", "fr", "ja", "ar"]) {
  const f = new Intl.DurationFormat(locale, { style: "long" });
  console.log(`${locale}: ${f.format(duration)}`);
}
de: 2 Stunden und 30 Minuten en-US: 2 hours and 30 minutes fr: 2 heures et 30 minutes ja: 2時間30分 ar: ساعتان و٣٠ دقيقة

Unterstützte Locales prüfen (supportedLocalesOf)

const supported = Intl.DurationFormat.supportedLocalesOf(["de", "tlh", "en-US"]);
console.log(supported);
["de", "en-US"]

// Wichtig · Fallstricke

Browser-Kompatibilität: Intl.DurationFormat ist Teil von ES2024 und seit 2024 in Chrome 129+, Edge 129+, Firefox 128+ und Safari 16.4+ verfügbar. In älteren Umgebungen (insbesondere Node.js < 22) ist die Klasse möglicherweise nicht vorhanden – eine Feature-Erkennung ist empfehlenswert:

Negative Werte: Einzelne Felder dürfen negativ sein, jedoch müssen alle Felder dasselbe Vorzeichen haben – gemischte Vorzeichen werfen einen RangeError.

Kein Temporal.Duration-Objekt nötig: Die API akzeptiert einfache Objekte; eine direkte Integration mit der Temporal-Proposal-API ist jedoch geplant und wird zukünftig unterstützt.