Start · Sprachen · JavaScript · Referenz · Temporal.PlainMonthDay.prototype.toString()

Temporal.PlainMonthDay.prototype.toString()

Methode

Gibt einen String zurück, der den Monat-Tag im RFC 9557-Format darstellt, z. B. <code>"12-24"</code> oder <code>"1972-12-24[u-ca=iso8601]"</code>.

seit JavaScript Temporal (ES-Proposal Stage 3/4) – Firefox 139+, C Kategorie: method-property

Signatur

Temporal.PlainMonthDay.prototype.toString(options)

Beschreibung

Die Methode toString() wandelt ein Temporal.PlainMonthDay in eine maschinenlesbare Zeichenkette nach RFC 9557 um, einer Erweiterung von ISO 8601. Beim ISO-8601-Kalender kommt standardmäßig die kurze Form MM-DD heraus, z. B. "02-29".

Über die Option calendarName legen Sie fest, ob die Kalender-Annotation [u-ca=…] angehängt wird. Mit Annotation enthält der String immer auch das Referenzjahr (im ISO-Kalender 1972). Ohne dieses Jahr ließe sich ein Monat-Tag in einem Nicht-ISO-Kalender nicht eindeutig darstellen.

Nutzen Sie toString(), wenn Sie Werte speichern, übertragen oder serialisieren wollen, etwa Geburtstage, Jahrestage oder wiederkehrende Feiertage. Mit Temporal.PlainMonthDay.from() lässt sich der String ohne Verlust wieder einlesen. Für die Anzeige an Nutzer eignet sich dagegen toLocaleString().

Parameter

Name Typ Default Beschreibung
$options object | undefined undefined Optionales Objekt mit der folgenden Eigenschaft.
$options.calendarName "auto" | "always" | "never" | "critical" "auto" Legt fest, ob die Kalender-Annotation erscheint. "auto": nur bei anderen Kalendern als iso8601. "always": immer, also auch [u-ca=iso8601]. "never": nie. "critical": immer, mit dem Kritisch-Flag !, z. B. [!u-ca=iso8601]. Bei jeder Annotation wird das Referenzjahr mit ausgegeben.

Rückgabewert

Typ
string
Beschreibung
Der Monat-Tag im RFC 9557-Format. Beim ISO-Kalender mit calendarName: "auto" ist das MM-DD, sonst YYYY-MM-DD[u-ca=…] mit Referenzjahr.

Beispiele

Einfache Umwandlung in einen String

const heiligabend = Temporal.PlainMonthDay.from({ month: 12, day: 24 });
console.log(heiligabend.toString());

// Template-Literale rufen toString() automatisch auf
console.log(`Bescherung am ${heiligabend}`);
12-24 Bescherung am 12-24

Kalender-Annotation mit calendarName steuern

const md = Temporal.PlainMonthDay.from("07-01");

console.log(md.toString({ calendarName: "auto" }));
console.log(md.toString({ calendarName: "always" }));
console.log(md.toString({ calendarName: "critical" }));
console.log(md.toString({ calendarName: "never" }));
07-01 1972-07-01[u-ca=iso8601] 1972-07-01[!u-ca=iso8601] 07-01

Geburtstage speichern und wieder einlesen

const geburtstage = {
  anna: Temporal.PlainMonthDay.from({ month: 3, day: 14 }),
  ben: Temporal.PlainMonthDay.from({ month: 2, day: 29 })
};

// Serialisieren (JSON.stringify nutzt toJSON(), das wie toString() arbeitet)
const json = JSON.stringify(geburtstage);
console.log(json);

// Wieder einlesen
const geladen = Object.fromEntries(
  Object.entries(JSON.parse(json)).map(([name, s]) => [name, Temporal.PlainMonthDay.from(s)])
);

// Geburtstag im Jahr 2025 berechnen (29.02. wird auf 28.02. begrenzt)
console.log(geladen.ben.toPlainDate({ year: 2025 }).toString());
{"anna":"03-14","ben":"02-29"} 2025-02-28

// Wichtig · Fallstricke

  • Browser-Unterstützung: Temporal ist neu. Nativ gibt es die API in Firefox ab 139 und in Chromium-Browsern ab 144, in Safari derzeit nicht. Für ältere Umgebungen gibt es einen Polyfill wie @js-temporal/polyfill oder temporal-polyfill.
  • Nicht für die Anzeige gedacht: Das Format richtet sich an Maschinen. Für lokalisierte Ausgaben wie „24. Dezember“ verwenden Sie toLocaleString(\"de-DE\", { month: \"long\", day: \"numeric\" }).
  • Referenzjahr: Das Jahr in der annotierten Form (z. B. 1972) ist nur ein interner Bezugspunkt und hat keine fachliche Bedeutung.
  • Nicht-ISO-Kalender: Mit calendarName: \"never\" geht bei anderen Kalendern Information verloren. Der String liefert dann beim Einlesen einen anderen Monat-Tag.
  • Fehler: Ist options weder ein Objekt noch undefined, wird ein TypeError ausgelöst. Ungültige Werte für calendarName lösen einen RangeError aus.
  • Vergleiche: valueOf() löst absichtlich einen TypeError aus. Deshalb funktionieren < und > nicht. Nutzen Sie equals() oder vergleichen Sie explizit die toString()-Werte.