Signatur
Beschreibung
Die Zugriffseigenschaft calendarId liefert den Bezeichner des Kalendersystems, das mit einer Temporal.PlainYearMonth-Instanz verknüpft ist. Intern speichert Temporal jedes Jahr-Monat-Objekt als ISO-8601-Datum (inklusive eines Referenztags). Erst über den Kalender werden Felder wie year, month, monthCode oder era berechnet.
Standardmäßig ist der Wert "iso8601". Wurde das Objekt mit einem anderen Kalender erstellt, etwa über die Option calendar in Temporal.PlainYearMonth.from() oder über eine Annotation wie [u-ca=hebrew] im String, steht hier der entsprechende Bezeichner, z. B. "gregory", "japanese", "hebrew", "islamic-civil" oder "chinese".
Die Eigenschaft ist nur lesbar, denn es gibt keinen Setter. Nützlich ist sie vor allem, um vor Vergleichen oder Berechnungen zu prüfen, ob zwei Objekte im selben Kalender vorliegen, um Kalenderinformationen zu protokollieren oder um bei der Serialisierung zu entscheiden, ob eine Kalender-Annotation nötig ist.
Rückgabewert
"iso8601", "gregory" oder "hebrew".Beispiele
Standardkalender eines Jahr-Monats abfragen
const abrechnungsMonat = Temporal.PlainYearMonth.from("2024-03");
console.log(abrechnungsMonat.calendarId);
console.log(abrechnungsMonat.toString());
Kalender aus einem annotierten Datum übernehmen
// Ein Datum im japanischen Kalender in einen Jahr-Monat umwandeln
const datum = Temporal.PlainDate.from("2024-03-15[u-ca=japanese]");
const ym = datum.toPlainYearMonth();
console.log(ym.calendarId);
console.log(ym.era, ym.eraYear, ym.month);
Kalender vor dem Vergleich prüfen
const istGleicherKalender = (a, b) => a.calendarId === b.calendarId;
const iso = Temporal.PlainYearMonth.from("2024-09");
const hebr = Temporal.PlainDate.from("2024-09-15")
.withCalendar("hebrew")
.toPlainYearMonth();
if (!istGleicherKalender(iso, hebr)) {
console.log(`Unterschiedliche Kalender: ${iso.calendarId} vs. ${hebr.calendarId}`);
}
console.log(iso.equals(hebr));
Bezeichner werden kanonisiert
const ym = Temporal.PlainYearMonth.from({ year: 2024, month: 5, calendar: "GREGORY" });
console.log(ym.calendarId);
// Wichtig · Fallstricke
- Nur lesbar: Eine Zuweisung an
calendarIdhat keine Wirkung und löst im Strict Mode einenTypeErroraus. Anders alsPlainDatehatPlainYearMonthkeine MethodewithCalendar(). Um den Kalender zu wechseln, geht man übertoPlainDate({ day: 1 }).withCalendar(id).toPlainYearMonth(). - Frühere API: In älteren Entwürfen und Polyfill-Versionen gab es die Eigenschaft
calendar, die einTemporal.Calendar-Objekt lieferte. Diese Objekte wurden aus dem Proposal entfernt. Heute gibt es nur noch den StringcalendarId. - Kanonisierung: Bezeichner werden in Kleinbuchstaben und in die kanonische Form umgewandelt. Aliase wie
\"islamicc\"werden zu\"islamic-civil\". Vergleiche man daher immer mit dem kanonischen Wert. - Referenztag: Bei Kalendern, die nicht ISO sind, enthält
toString()auch den internen ISO-Referenztag und die Annotation, z. B.2024-09-03[u-ca=hebrew]. - Vergleiche:
equals()gibt bei unterschiedlichen Kalendernfalsezurück.Temporal.PlainYearMonth.compare()vergleicht dagegen nur die ISO-Daten und ignoriert den Kalender. - Kompatibilität: Temporal ist noch nicht in allen Browsern verfügbar (Firefox ab 139, Chrome ab 144, Safari noch nicht). Für ältere Umgebungen gibt es die Polyfills
@js-temporal/polyfillodertemporal-polyfill. Welche Kalender unterstützt werden, hängt von den Intl-Daten der Engine ab.