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

Temporal.PlainYearMonth.prototype.toLocaleString()

Methode

Gibt eine sprachabhängige Zeichenkette für den Jahres-Monat zurück, z. B. <code>"August 2021"</code>. Intern wird dafür <code>Intl.DateTimeFormat</code> verwendet.

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

Signatur

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

Beschreibung

toLocaleString() formatiert ein Temporal.PlainYearMonth für die Anzeige, also zum Beispiel „August 2021“, „8/2021“ oder „令和3年8月“. Das Ergebnis hängt vom Gebietsschema ab. Intern wird ein Intl.DateTimeFormat mit denselben Argumenten erzeugt und darauf format(this) aufgerufen.

Wenn du keine Optionen angibst, werden nur Jahr und Monat formatiert (year und month, jeweils numerisch). Mit den Optionen von Intl.DateTimeFormat steuerst du die Darstellung, zum Beispiel month: "long" für den ausgeschriebenen Monatsnamen oder dateStyle. Erlaubt sind nur Felder, die ein Jahres-Monat auch hat.

Wichtig: Der Kalender des PlainYearMonth muss genau zum Kalender des Gebietsschemas passen. Ein Wert im Standardkalender iso8601 passt also nicht zum gregorianischen Kalender (gregory) von "de-DE". In diesem Fall wird ein RangeError ausgelöst. Lege den Jahres-Monat deshalb mit calendar: "gregory" an oder wandle ihn vor dem Formatieren mit withCalendar() um.

Die Methode ist für die Anzeige in der Oberfläche gedacht. Zum Speichern oder Übertragen solltest du toString() oder toJSON() verwenden. Diese liefern das stabile ISO-Format ("2021-08").

Parameter

Name Typ Default Beschreibung
$locales string | string[] | Intl.Locale | undefined Standard-Gebietsschema der Laufzeitumgebung BCP-47-Sprachkennung(en) wie "de-DE" oder ["de-AT", "de"]. Erweiterungen wie -u-ca-japanese legen den Kalender fest. Dieser muss zum Kalender des Objekts passen.
$options object | undefined { year: "numeric", month: "numeric" } Optionen wie bei Intl.DateTimeFormat, z. B. year, month, era, dateStyle oder calendar. Uhrzeit-Optionen (hour, minute, timeStyle …) sowie day und weekday sind nicht erlaubt und lösen einen TypeError aus.

Rückgabewert

Typ
string
Beschreibung
Eine sprachabhängige Darstellung von Jahr und Monat, z. B. "August 2021".

Beispiele

Monat ausgeschrieben auf Deutsch und Englisch

// Kalender "gregory" passt zu de-DE und en-US
const ym = Temporal.PlainYearMonth.from({ year: 2021, month: 8, calendar: "gregory" });

console.log(ym.toLocaleString("de-DE", { year: "numeric", month: "long" }));
console.log(ym.toLocaleString("en-US", { year: "numeric", month: "long" }));
console.log(ym.toLocaleString("en-US"));
August 2021 August 2021 8/2021

Fehler beim ISO-Kalender vermeiden

const ym = Temporal.PlainYearMonth.from("2024-03"); // Kalender iso8601

try {
  ym.toLocaleString("de-DE");
} catch (err) {
  console.log(err.constructor.name);
}

// Lösung: vorher in den gregorianischen Kalender umwandeln
const anzeige = ym.withCalendar("gregory")
  .toLocaleString("de-DE", { month: "long", year: "numeric" });
console.log(anzeige);
RangeError März 2024

Abrechnungszeiträume in einer Liste anzeigen

const start = Temporal.PlainYearMonth.from({ year: 2024, month: 11, calendar: "gregory" });

const zeitraeume = Array.from({ length: 3 }, (_, i) =>
  start.add({ months: i }).toLocaleString("de-DE", { month: "short", year: "numeric" })
);

console.log(zeitraeume.join(" | "));
Nov. 2024 | Dez. 2024 | Jan. 2025

Japanischer Kalender mit Ära

const ym = Temporal.PlainYearMonth.from({ year: 2021, month: 8, calendar: "japanese" });

console.log(ym.toLocaleString("ja-JP-u-ca-japanese", { era: "long", year: "numeric", month: "long" }));
令和3年8月

// Wichtig · Fallstricke

  • Kalender muss passen: Anders als bei PlainDate wird beim Formatieren von PlainYearMonth (und PlainMonthDay) nicht automatisch umgerechnet. Wenn der Kalender vom Kalender des Gebietsschemas abweicht, kommt es zu einem RangeError. Das gilt auch für iso8601 im Vergleich zu gregory. Abhilfe schafft withCalendar().
  • Nicht erlaubte Optionen: day, weekday, Uhrzeit-Felder und timeStyle lösen einen TypeError aus.
  • Performance: Bei jedem Aufruf wird intern ein neues Intl.DateTimeFormat erzeugt. Wenn du viele Werte formatierst, lege lieber einmal new Intl.DateTimeFormat(...) an und rufe dessen format() wiederholt auf.
  • Ausgabe nicht auswerten: Das Ergebnis kann sich zwischen Browsern und ICU-Versionen unterscheiden, zum Beispiel bei Abkürzungen oder Leerzeichen. Werte die Zeichenkette deshalb nicht maschinell aus. Für Daten verwendest du toString().
  • Kompatibilität: Temporal ist noch nicht in allen Browsern verfügbar (Safari fehlt bisher). Für ältere Umgebungen gibt es das Polyfill @js-temporal/polyfill.