Signatur
Beschreibung
toLocaleTimeString() wandelt nur die Uhrzeit eines Date-Objekts in eine gut lesbare, an Sprache und Region angepasste Darstellung um – etwa 14:05:09 im Deutschen oder 2:05:09 PM im amerikanischen Englisch. Das Datum wird dabei weggelassen.
Über locales legst du die Sprache fest (z. B. "de-DE"), über options steuerst du die Ausgabe genau: Stunden/Minuten/Sekunden einzeln ein- oder ausblenden, 12- oder 24-Stunden-Format (hour12, hourCycle), eine andere Zeitzone (timeZone) oder den Namen der Zeitzone (timeZoneName). In Umgebungen mit Intl-Unterstützung wird intern Intl.DateTimeFormat verwendet.
Die Methode eignet sich für Anzeigen in der Oberfläche – Uhrzeiten in Chats, Logs für Nutzer, Terminlisten. Für maschinenlesbare Formate (Speichern, APIs) ist sie ungeeignet; nutze dafür toISOString(). Wenn du viele Werte formatierst, erstelle einmalig ein Intl.DateTimeFormat-Objekt und verwende dessen format()-Methode.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $locales | string | string[] | Intl.Locale | undefined | Standard-Locale der Laufzeitumgebung | BCP-47-Sprachkennung wie "de-DE" oder "en-US" bzw. ein Array davon (Fallback-Reihenfolge). |
| $options | Intl.DateTimeFormatOptions | { hour: "numeric", minute: "numeric", second: "numeric" } | Formatierungsoptionen, u. a. hour, minute, second ("numeric" | "2-digit"), hour12, hourCycle ("h11", "h12", "h23", "h24"), timeZone (z. B. "Europe/Berlin", "UTC"), timeZoneName, fractionalSecondDigits und timeStyle. Ohne Zeitkomponenten werden Stunde, Minute und Sekunde ergänzt. |
Rückgabewert
"Invalid Date" zurückgegeben.Beispiele
Uhrzeit in verschiedenen Sprachen
const termin = new Date(Date.UTC(2024, 4, 17, 12, 5, 9));
// Ausgabe in fester Zeitzone, damit das Ergebnis reproduzierbar ist
const opts = { timeZone: 'Europe/Berlin' };
console.log(termin.toLocaleTimeString('de-DE', opts));
console.log(termin.toLocaleTimeString('en-US', opts));
console.log(termin.toLocaleTimeString('ja-JP', opts));
Nur Stunden und Minuten für einen Chat-Zeitstempel
const formatiereChatZeit = (date) =>
date.toLocaleTimeString('de-DE', {
hour: '2-digit',
minute: '2-digit',
timeZone: 'Europe/Berlin'
});
const nachricht = { text: 'Hallo!', gesendet: new Date('2024-05-17T07:03:00Z') };
console.log(`[${formatiereChatZeit(nachricht.gesendet)}] ${nachricht.text}`);
Weltuhr mit Zeitzonenname
const jetzt = new Date(Date.UTC(2024, 0, 15, 18, 30));
const staedte = {
Berlin: 'Europe/Berlin',
'New York': 'America/New_York',
Tokio: 'Asia/Tokyo'
};
for (const [stadt, timeZone] of Object.entries(staedte)) {
const zeit = jetzt.toLocaleTimeString('de-DE', {
timeZone,
hour: '2-digit',
minute: '2-digit',
timeZoneName: 'short'
});
console.log(`${stadt}: ${zeit}`);
}
Performant viele Zeiten formatieren
// Für Listen: Formatter einmal erzeugen und wiederverwenden
const fmt = new Intl.DateTimeFormat('de-DE', {
timeStyle: 'short',
timeZone: 'UTC'
});
const logs = [
new Date('2024-05-17T08:00:00Z'),
new Date('2024-05-17T08:15:30Z')
];
console.log(logs.map((d) => fmt.format(d)));
// Wichtig · Fallstricke
- Ausgabe nicht parsen oder vergleichen: Das exakte Format hängt von Browser, ICU-Version und Betriebssystem ab. Manche Engines verwenden z. B. ein schmales geschütztes Leerzeichen (U+202F) vor „PM“, sodass String-Vergleiche in Tests plötzlich fehlschlagen.
- Zeitzone: Ohne
timeZonewird die Zeitzone des Systems verwendet. Auf Servern (Node.js, oft UTC) sieht die Ausgabe daher anders aus als im Browser – für reproduzierbare ErgebnissetimeZoneimmer explizit angeben. timeStyledarf nicht mit einzelnen Komponenten wiehouroderminutekombiniert werden, sonst wird einTypeErrorgeworfen. Ungültige Locale-Angaben lösen einenRangeErroraus, ebenso unbekannte Zeitzonen.- Datumsoptionen wie
yearodermonthwerden zwar akzeptiert,dateStylejedoch führt beitoLocaleTimeString()zu einemTypeError. - Performance: Jeder Aufruf erzeugt intern einen neuen Formatter. Bei vielen Werten ist
Intl.DateTimeFormatdeutlich schneller. - Kompatibilität: In allen modernen Browsern und Node.js (ab 13 mit vollständigen ICU-Daten) unterstützt.
fractionalSecondDigitsundtimeStylesind neuer und fehlen in sehr alten Umgebungen.