Start · Sprachen · JavaScript · Referenz · new Intl.DurationFormat()

new Intl.DurationFormat()

Methode

Erzeugt ein <code>Intl.DurationFormat</code>-Objekt, das Zeitdauern wie „1 Stunde, 46 Minuten“ oder „1:46:40“ passend zur Sprache formatiert.

seit JavaScript ES2025 (ECMA-402) · Chrome/Edge 129+, Firefox 136+ Kategorie: method-property

Signatur

new Intl.DurationFormat(locales, options)

Beschreibung

Der Konstruktor Intl.DurationFormat() erzeugt einen wiederverwendbaren Formatierer für Zeitdauern, also nicht für Zeitpunkte. Übergeben wird ein Dauer-Objekt wie { hours: 1, minutes: 46, seconds: 40 }. Daraus wird eine Zeichenkette gemäß der gewählten Sprache, etwa „1 Std., 46 Min. und 40 Sek.“ oder im Digitalformat „1:46:40“.

Sinnvoll ist das überall, wo Dauern für Menschen lesbar erscheinen sollen: Videolänge, Laufzeit eines Uploads, Restzeit einer Aufgabe, Trainingszeiten oder Lieferfristen. Eigene Mehrzahlregeln, Einheitenkürzel und Listentrenner („und“, „,“) musst du nicht selbst schreiben, denn die Sprachdaten aus CLDR liefern das automatisch.

Über options steuerst du den Gesamtstil (long, short, narrow, digital) und bei Bedarf jede Einheit einzeln, zum Beispiel hours: "numeric" oder secondsDisplay: "always". Das Erzeugen eines Formatierers kostet Rechenzeit. Lege ihn deshalb einmal an und nutze ihn mit format() bzw. formatToParts() mehrfach.

Der Konstruktor muss mit new aufgerufen werden. Ein Aufruf ohne new löst einen TypeError aus. Ungültige Sprach-Tags führen zu einem RangeError, ebenso ungültige Optionswerte.

Parameter

Name Typ Default Beschreibung
$locales string | string[] | Intl.Locale | undefined Standardsprache der Laufzeitumgebung BCP-47-Sprach-Tag (z. B. "de", "de-AT") oder eine Liste davon, nach Priorität geordnet. Die Unicode-Erweiterung -u-nu- (Zahlensystem) wird unterstützt.
$options object {} Konfigurationsobjekt mit folgenden Eigenschaften:
  • localeMatcher: "best fit" (Standard) oder "lookup"
  • numberingSystem: z. B. "latn", "arab"
  • style: "long", "short" (Standard), "narrow" oder "digital"
  • years, months, weeks, days: "long", "short" oder "narrow"
  • hours, minutes, seconds: zusätzlich "numeric" und "2-digit"
  • milliseconds, microseconds, nanoseconds: "long", "short", "narrow" oder "numeric"
  • yearsDisplay … nanosecondsDisplay: "auto" (Nullwerte weglassen) oder "always"
  • fractionalDigits: 0–9, Anzahl der Nachkommastellen bei numerischen Unterkomponenten der Sekunde
Wenn eine Einheit nicht angegeben ist, hängt ihr Standardwert von style ab.

Rückgabewert

Typ
Intl.DurationFormat
Beschreibung
Eine neue Intl.DurationFormat-Instanz mit den Methoden format(), formatToParts() und resolvedOptions().

Beispiele

Formatierer anlegen und Stile vergleichen

const dauer = { hours: 1, minutes: 46, seconds: 40 };

for (const style of ["long", "short", "narrow", "digital"]) {
  const df = new Intl.DurationFormat("en", { style });
  console.log(style, "→", df.format(dauer));
}
long → 1 hour, 46 minutes, 40 seconds short → 1 hr, 46 min, 40 sec narrow → 1h 46m 40s digital → 1:46:40

Videolänge auf Deutsch aus Sekunden anzeigen

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

const sekundenZuDauer = (total) => ({
  hours: Math.floor(total / 3600),
  minutes: Math.floor((total % 3600) / 60),
  seconds: total % 60,
});

console.log(df.format(sekundenZuDauer(6400)));
console.log(df.format(sekundenZuDauer(125))); // Stunden = 0 wird weggelassen
1 Stunde, 46 Minuten und 40 Sekunden 2 Minuten und 5 Sekunden

Stoppuhr im Digitalformat mit Nachkommastellen

const stoppuhr = new Intl.DurationFormat("de", {
  style: "digital",
  hoursDisplay: "always",
  fractionalDigits: 2,
});

console.log(stoppuhr.format({ minutes: 3, seconds: 7, milliseconds: 450 }));
console.log(stoppuhr.resolvedOptions().style);
0:03:07,45 digital

Funktionsprüfung mit Rückfall

const formatiereDauer = (dauer, locale = "de") => {
  if (typeof Intl.DurationFormat === "function") {
    return new Intl.DurationFormat(locale, { style: "short" }).format(dauer);
  }
  // Einfacher Rückfall für ältere Browser
  return `${dauer.minutes ?? 0} min ${dauer.seconds ?? 0} s`;
};

console.log(Intl.DurationFormat.supportedLocalesOf(["de", "fr", "xx"]));
console.log(formatiereDauer({ minutes: 12, seconds: 30 }));
["de", "fr"] 12 Min. und 30 Sek.