Signatur
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
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}`);
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" }));
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());
// 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/polyfillodertemporal-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
optionsweder ein Objekt nochundefined, wird einTypeErrorausgelöst. Ungültige Werte fürcalendarNamelösen einenRangeErroraus. - Vergleiche:
valueOf()löst absichtlich einenTypeErroraus. Deshalb funktionieren<und>nicht. Nutzen Sieequals()oder vergleichen Sie explizit dietoString()-Werte.