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

Temporal.ZonedDateTime.prototype.toLocaleString()

Methode

Gibt eine sprachabhängig formatierte Zeichenkette für Datum, Uhrzeit und Zeitzone dieses <code>Temporal.ZonedDateTime</code> zurück.

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

Signatur

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

Beschreibung

toLocaleString() wandelt einen Temporal.ZonedDateTime in eine Zeichenkette für Menschen um, die der Sprache und den regionalen Gepflogenheiten entspricht. Intern wird dafür Intl.DateTimeFormat genutzt. Die Parameter locales und options funktionieren daher genauso wie beim Konstruktor Intl.DateTimeFormat().

Ohne Optionen gibt die Methode Datum, Uhrzeit (mit Sekunden) und einen kurzen Zeitzonennamen aus, zum Beispiel "15.7.2024, 14:30:00 MESZ". Die Zeitzone kommt immer aus dem Objekt selbst, also aus timeZoneId. Sie lässt sich nicht über die Option timeZone überschreiben. Wenn du eine andere Zeitzone anzeigen willst, rechnest du vorher mit withTimeZone() um.

Nutze die Methode für die Anzeige in Oberflächen, E-Mails oder Protokollen, die Menschen lesen. Für Datenaustausch, Speicherung oder Vergleiche ist sie ungeeignet, weil sich die Ausgabe je nach Browser, ICU-Version und Sprache unterscheidet. Dafür gibt es toString() bzw. toJSON() im stabilen ISO-8601/RFC-9557-Format.

Parameter

Name Typ Default Beschreibung
$locales string | string[] | Intl.Locale | undefined undefined (Standardsprache der Laufzeitumgebung) BCP-47-Sprachkennung wie "de-DE" oder eine Liste davon in Reihenfolge der Priorität. Gleiche Bedeutung wie bei Intl.DateTimeFormat().
$options Intl.DateTimeFormatOptions | undefined undefined Formatierungsoptionen wie dateStyle, timeStyle, weekday, hour12, timeZoneName usw. Die Option timeZone ist nicht erlaubt, weil die Zeitzone aus dem Objekt kommt.

Rückgabewert

Typ
string
Beschreibung
Die sprachabhängig formatierte Darstellung von Datum, Uhrzeit und (standardmäßig) Zeitzone.

Beispiele

Standardausgabe in verschiedenen Sprachen

const termin = Temporal.ZonedDateTime.from("2024-07-15T14:30:00[Europe/Berlin]");

console.log(termin.toLocaleString("de-DE"));
console.log(termin.toLocaleString("en-US"));
15.7.2024, 14:30:00 MESZ 7/15/2024, 2:30:00 PM GMT+2

Lange Darstellung mit dateStyle und timeStyle

const termin = Temporal.ZonedDateTime.from("2024-07-15T14:30:00[Europe/Berlin]");

const text = termin.toLocaleString("de-DE", {
  dateStyle: "full",
  timeStyle: "short",
});
console.log(`Ihr Termin: ${text}`);
Ihr Termin: Montag, 15. Juli 2024 um 14:30

Termin in der Ortszeit des Teilnehmers anzeigen

const termin = Temporal.ZonedDateTime.from("2024-07-15T14:30:00[Europe/Berlin]");

// Nicht über die Option timeZone, sondern vorher umrechnen
const tokio = termin.withTimeZone("Asia/Tokyo");
console.log(tokio.toLocaleString("de-DE", {
  hour: "2-digit",
  minute: "2-digit",
  timeZoneName: "long",
}));

try {
  termin.toLocaleString("de-DE", { timeZone: "Asia/Tokyo" });
} catch (err) {
  console.log(err.name);
}
21:30 Japanische Normalzeit TypeError

Viele Werte effizient formatieren

const termine = [
  "2024-07-15T09:00:00[Europe/Berlin]",
  "2024-07-16T13:15:00[Europe/Berlin]",
].map((s) => Temporal.ZonedDateTime.from(s));

// Einen Formatter einmal erzeugen und wiederverwenden
const fmt = new Intl.DateTimeFormat("de-DE", {
  dateStyle: "medium",
  timeStyle: "short",
  timeZone: "Europe/Berlin",
});

for (const t of termine) {
  console.log(fmt.format(t.toInstant()));
}
15.07.2024, 09:00 16.07.2024, 13:15

// Wichtig · Fallstricke

  • Option timeZone ist verboten: Wenn du sie übergibst, wirft die Methode einen TypeError. Rechne stattdessen vorher mit withTimeZone() um.
  • Kalender muss passen: Hat das Objekt einen anderen Kalender als iso8601 und passt dieser nicht zum Kalender der Sprache bzw. der Option calendar, wirft die Methode einen RangeError.
  • Intl.DateTimeFormat.prototype.format() nimmt keine ZonedDateTime-Objekte an (es gibt einen TypeError). Wenn du viele Werte formatierst, erzeugst du jeder Aufruf von toLocaleString() einen neuen Formatter. Schneller ist es, einen Formatter mit passender timeZone einmal anzulegen und zdt.toInstant() zu formatieren.
  • Ausgabe ist nicht stabil: Das genaue Format (Leerzeichen, schmale geschützte Leerzeichen vor „PM“, Namen der Zeitzonen) hängt von Browser und ICU-Version ab. Vergleiche die Ausgabe nicht in Tests oder Programmlogik und lies sie nicht wieder ein.
  • Kompatibilität: Temporal ist erst in neueren Browsern verfügbar (Firefox 139+, Chrome/Edge 144+). Safari und ältere Node.js-Versionen brauchen einen Polyfill wie @js-temporal/polyfill. Ohne Intl-Unterstützung fällt die Methode auf eine von der Implementierung festgelegte Ausgabe zurück.