Signatur
Beschreibung
Die schreibgeschützte Accessor-Eigenschaft calendarId liefert den Bezeichner des Kalendersystems, das einem Temporal.PlainMonthDay zugeordnet ist. Intern speichert jede Instanz ein ISO-8601-Datum mit einem Referenzjahr. Erst der Kalender legt fest, wie daraus monthCode und day berechnet werden.
Ohne Angabe ist der Kalender "iso8601". Andere Kalender wie "gregory", "hebrew", "islamic-umalqura", "japanese" oder "chinese" legen Sie über die Option calendar in Temporal.PlainMonthDay.from(), über eine Annotation [u-ca=…] im String oder über PlainDate.prototype.toPlainMonthDay() fest.
Nützlich ist calendarId vor allem, wenn Sie wiederkehrende Termine speichern, anzeigen oder vergleichen, zum Beispiel Geburtstage oder religiöse Feiertage. Zwei PlainMonthDay-Werte mit gleichem Monat und Tag in verschiedenen Kalendern stehen für ganz unterschiedliche Tage im Jahr. Deshalb sollten Sie die Kalender-ID immer mit abspeichern.
Die Eigenschaft hat nur einen Getter und keinen Setter. Anders als PlainDate hat PlainMonthDay keine Methode withCalendar(). Um den Kalender zu wechseln, gehen Sie den Umweg über ein Temporal.PlainDate.
Rückgabewert
"iso8601", "gregory", "hebrew" oder "chinese".Beispiele
Standardkalender einer PlainMonthDay-Instanz
const heiligabend = Temporal.PlainMonthDay.from("12-24");
console.log(heiligabend.calendarId);
console.log(heiligabend.toString());
Nicht-ISO-Kalender über die Option calendar
// Chinesisches Neujahr: 1. Tag des 1. Monats im chinesischen Kalender
const neujahr = Temporal.PlainMonthDay.from({
monthCode: "M01",
day: 1,
calendar: "chinese",
});
console.log(neujahr.calendarId);
console.log(neujahr.monthCode, neujahr.day);
Kalender über PlainDate wechseln und mit abspeichern
// Pessach 2024 (23.04.2024) als jährlich wiederkehrender Termin im hebräischen Kalender
const pessach = Temporal.PlainDate.from("2024-04-23")
.withCalendar("hebrew")
.toPlainMonthDay();
const gespeichert = {
monthCode: pessach.monthCode,
day: pessach.day,
calendar: pessach.calendarId, // unbedingt mitspeichern!
};
console.log(gespeichert);
// Später wiederherstellen
const wieder = Temporal.PlainMonthDay.from(gespeichert);
console.log(wieder.equals(pessach));
Kalender vor dem Vergleich prüfen
const a = Temporal.PlainMonthDay.from({ monthCode: "M03", day: 1 });
const b = Temporal.PlainMonthDay.from({ monthCode: "M03", day: 1, calendar: "gregory" });
if (a.calendarId !== b.calendarId) {
console.log(`Unterschiedliche Kalender: ${a.calendarId} / ${b.calendarId}`);
}
console.log(a.equals(b)); // equals berücksichtigt auch den Kalender
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung an
calendarIdhat keine Wirkung und wirft im Strict Mode einenTypeError. Den Kalender wechseln Sie überPlainDate.prototype.withCalendar()mit anschließendemtoPlainMonthDay(). - Kanonisierung: IDs werden normalisiert. Aus
"GREGORY"wird zum Beispiel"gregory", veraltete Aliasse werden auf die kanonische Form abgebildet. Vergleichen Sie deshalb nur mit kanonischen IDs. "iso8601"ist nicht dasselbe wie"gregory": Beide Kalender haben dieselben Monate, trotzdem liefertequals()bei unterschiedlichen IDsfalse.- Serialisierung: Mit ISO-Kalender gibt
toString()nurMM-DDaus. Bei anderen Kalendern enthält die Ausgabe zusätzlich das Referenzjahr und die Annotation[u-ca=…]. Speichern Sie die Kalender-ID trotzdem explizit mit ab. - Unterstützung: Welche Kalender verfügbar sind, hängt von den Intl-Daten der Engine ab. Eine unbekannte ID führt in
from()zu einemRangeError. - Kompatibilität: Temporal ist noch nicht Baseline. Es wird ab Firefox 139 und Chrome/Edge 144 unterstützt, Safari unterstützt es noch nicht. Für ältere Umgebungen gibt es den Polyfill
@js-temporal/polyfillodertemporal-polyfill.