Start · Sprachen · JavaScript · Referenz · Temporal.PlainTime.prototype.toLocaleString()

Temporal.PlainTime.prototype.toLocaleString()

Methode

Gibt die Uhrzeit eines <code>Temporal.PlainTime</code> als Zeichenkette zurück, die nach Sprache und Region formatiert ist. Intern wird dafür <code>Intl.DateTimeFormat</code> verwendet.

seit JavaScript ES2026 (Temporal): Firefox 139+, Chrome/Edge 144+; Kategorie: method-property

Signatur

Temporal.PlainTime.prototype.toLocaleString(locales, options)

Beschreibung

toLocaleString() formatiert eine reine Uhrzeit (ohne Datum und ohne Zeitzone) so, wie sie Menschen in einer bestimmten Sprache und Region erwarten, etwa 15:30:00 in Deutschland oder 3:30:00 PM in den USA. Intern entspricht der Aufruf new Intl.DateTimeFormat(locales, options).format(time).

Die Methode ist für die Anzeige in der Oberfläche gedacht, zum Beispiel für Öffnungszeiten, Wecker, Fahrpläne oder Terminslots. Für Speicherung, Datenaustausch oder Vergleiche ist sie ungeeignet, denn die Ausgabe hängt von der Laufzeitumgebung ab. Dafür verwendest du toString() oder toJSON(), die das stabile ISO-8601-Format liefern (15:30:00).

Ohne options werden Stunde, Minute und Sekunde ausgegeben. Mit den Optionen von Intl.DateTimeFormat legst du die Ausgabe genauer fest, zum Beispiel mit timeStyle, hour, minute, second, fractionalSecondDigits, hour12/hourCycle oder dayPeriod. Optionen, die ein Datum brauchen (year, month, day, weekday, era, dateStyle) oder eine Zeitzone (timeZoneName), passen nicht zu einer reinen Uhrzeit und lösen einen TypeError aus.

Parameter

Name Typ Default Beschreibung
$locales string | string[] | Intl.Locale | undefined undefined (Standard-Locale der Umgebung) BCP-47-Sprachkennung wie "de-DE" oder "en-US", oder eine Liste davon in absteigender Priorität.
$options Intl.DateTimeFormatOptions undefined (entspricht hour, minute, second: "numeric") Formatierungsoptionen wie bei Intl.DateTimeFormat. Sinnvoll sind timeStyle, hour, minute, second, fractionalSecondDigits, hour12, hourCycle, dayPeriod und numberingSystem. Optionen, die ein Datum oder eine Zeitzone voraussetzen, führen zu einem TypeError.

Rückgabewert

Typ
string
Beschreibung
Die Uhrzeit als Zeichenkette, formatiert nach Sprache, Region und den angegebenen Optionen.

Beispiele

Standardformat in verschiedenen Sprachen

const zeit = new Temporal.PlainTime(15, 30, 5);

console.log(zeit.toLocaleString("de-DE"));
console.log(zeit.toLocaleString("en-US"));
console.log(zeit.toLocaleString("en-GB"));
// Zum Vergleich: stabiles ISO-Format
console.log(zeit.toString());
15:30:05 3:30:05 PM 15:30:05 15:30:05

Öffnungszeiten kompakt mit timeStyle anzeigen

const oeffnung = Temporal.PlainTime.from("08:00");
const schluss = Temporal.PlainTime.from("18:30");

const kurz = { timeStyle: "short" };
const text = `Geöffnet ${oeffnung.toLocaleString("de-DE", kurz)}–${schluss.toLocaleString("de-DE", kurz)} Uhr`;
console.log(text);

console.log(schluss.toLocaleString("en-US", kurz));
Geöffnet 08:00–18:30 Uhr 6:30 PM

Feine Steuerung: 12-Stunden-Format und Sekundenbruchteile

const t = Temporal.PlainTime.from("21:05:09.456");

// 12-Stunden-Format erzwingen, auch im Deutschen
console.log(t.toLocaleString("de-DE", { hour: "numeric", minute: "2-digit", hour12: true }));

// Stoppuhr-Anzeige mit Millisekunden
console.log(t.toLocaleString("de-DE", {
  hour: "2-digit", minute: "2-digit", second: "2-digit",
  fractionalSecondDigits: 3
}));
9:05 PM 21:05:09,456

Viele Zeiten performant mit Intl.DateTimeFormat formatieren

// Einen Formatierer wiederverwenden statt bei jedem Aufruf neu zu erzeugen
const fmt = new Intl.DateTimeFormat("de-DE", { timeStyle: "short" });

const slots = ["09:00", "09:30", "10:00"].map((s) => Temporal.PlainTime.from(s));
console.log(slots.map((slot) => fmt.format(slot)).join(", "));

// Datumsoptionen passen nicht zu einer reinen Uhrzeit
try {
  slots[0].toLocaleString("de-DE", { dateStyle: "full" });
} catch (e) {
  console.log(e.name);
}
09:00, 09:30, 10:00 TypeError

// Wichtig · Fallstricke

  • Ausgabe nicht maschinell weiterverarbeiten: Das genaue Format hängt vom Browser und von der ICU-/CLDR-Version ab und kann sich ändern. Moderne Engines setzen im Englischen zum Beispiel ein schmales geschütztes Leerzeichen (U+202F) vor „AM/PM“. Stringvergleiche in Tests können deshalb fehlschlagen. Zum Speichern und Parsen verwendest du toString() bzw. Temporal.PlainTime.from().
  • Keine Zeitzone: Ein PlainTime hat keine Zeitzone. Die Uhrzeit wird deshalb nie umgerechnet. Die Optionen timeZoneName und alle Datumsoptionen (year, month, day, weekday, dateStyle …) lösen einen TypeError aus.
  • Performance: Jeder Aufruf erzeugt intern einen neuen Formatierer. In Schleifen und großen Listen erstellst du besser einmal ein Intl.DateTimeFormat und rufst dessen format() auf. Das akzeptiert Temporal.PlainTime direkt.
  • Kompatibilität: Temporal ist relativ neu (Firefox 139+, Chrome/Edge 144+). Safari unterstützt es derzeit noch nicht standardmäßig. Für ältere Umgebungen gibt es Polyfills wie @js-temporal/polyfill oder temporal-polyfill. Die Ausgabe von Polyfills kann in Randfällen von der nativen Umsetzung abweichen.