Start · Sprachen · JavaScript · Referenz · Temporal.PlainMonthDay.prototype.calendarId

Temporal.PlainMonthDay.prototype.calendarId

Eigenschaft

Gibt die Kalender-ID (z. B. <code>"iso8601"</code>, <code>"hebrew"</code>, <code>"chinese"</code>) zurück, mit der ein <code>Temporal.PlainMonthDay</code> Monat und Tag deutet.

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

Signatur

get Temporal.PlainMonthDay.prototype.calendarId

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

Typ
string
Beschreibung
Die kanonische, kleingeschriebene Kalender-ID nach CLDR/BCP 47, z. B. "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());
iso8601 12-24

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);
chinese M01 1

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));
{ monthCode: 'M07', day: 15, calendar: 'hebrew' } true

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
Unterschiedliche Kalender: iso8601 / gregory false

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung an calendarId hat keine Wirkung und wirft im Strict Mode einen TypeError. Den Kalender wechseln Sie über PlainDate.prototype.withCalendar() mit anschließendem toPlainMonthDay().
  • 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 liefert equals() bei unterschiedlichen IDs false.
  • Serialisierung: Mit ISO-Kalender gibt toString() nur MM-DD aus. 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 einem RangeError.
  • 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/polyfill oder temporal-polyfill.