Signatur
Beschreibung
Die Zugriffseigenschaft calendarId ist schreibgeschützt und liefert die Kennung des Kalenders, mit dem eine Temporal.PlainDate-Instanz arbeitet. Intern speichert jedes PlainDate ein Datum nach ISO 8601. Vom Kalender hängt ab, wie dieses Datum in Jahr, Monat, Tag, Ära usw. aufgeteilt wird, also welche Werte year, month, monthCode oder era zurückgeben.
Standardmäßig ist der Kalender "iso8601". Andere Kalender legt man beim Erzeugen fest: im Konstruktor (vierter Parameter), mit einer Kalender-Anmerkung im String wie [u-ca=japanese] oder im Nachhinein mit withCalendar(). Möglich sind die Kalender-Kennungen, die Intl unterstützt, z. B. "gregory", "hebrew", "islamic-umalqura", "japanese", "chinese" oder "persian".
Das ist nützlich, wenn man vor dem Rechnen oder Vergleichen prüfen will, ob zwei Datumswerte im selben Kalender vorliegen. Man kann damit Daten, die von Nutzern oder aus einer Schnittstelle kommen, auf einen einheitlichen Kalender bringen oder in Protokollen und bei der Serialisierung den verwendeten Kalender angeben.
Die Eigenschaft hat einen Getter, aber keinen Setter. Zuweisungen wie date.calendarId = "hebrew" ändern nichts; im Strict Mode lösen sie einen TypeError aus. Um den Kalender zu wechseln, erzeugt man mit withCalendar() eine neue Instanz.
Rückgabewert
"iso8601", "gregory" oder "hebrew". Aliase werden auf die kanonische Form gebracht (z. B. "islamicc" → "islamic-civil").Beispiele
Standard- und benutzerdefinierter Kalender
const iso = Temporal.PlainDate.from("2024-03-15");
console.log(iso.calendarId);
const hebrew = new Temporal.PlainDate(2024, 3, 15, "hebrew");
console.log(hebrew.calendarId);
// Kalender über eine Anmerkung im String festlegen
const jp = Temporal.PlainDate.from("2024-03-15[u-ca=japanese]");
console.log(jp.calendarId, jp.era, jp.eraYear);
Vor dem Vergleich auf gleichen Kalender prüfen
const sameCalendar = (a, b) => a.calendarId === b.calendarId;
const a = Temporal.PlainDate.from("2024-05-01");
const b = Temporal.PlainDate.from("2024-05-01[u-ca=islamic-umalqura]");
console.log(sameCalendar(a, b));
// equals() prüft auch den Kalender
console.log(a.equals(b));
// compare() vergleicht nur das ISO-Datum
console.log(Temporal.PlainDate.compare(a, b));
Eingaben auf einen einheitlichen Kalender bringen
const normalize = (date, target = "iso8601") =>
date.calendarId === target ? date : date.withCalendar(target);
const input = Temporal.PlainDate.from("2024-10-03[u-ca=persian]");
console.log(input.calendarId, input.year, input.month, input.day);
const iso = normalize(input);
console.log(iso.calendarId, iso.toString());
Kalender bei der Serialisierung
const d = Temporal.PlainDate.from("2024-03-15").withCalendar("gregory");
console.log(d.toString());
console.log(d.toString({ calendarName: "never" }));
console.log(JSON.stringify({ date: d, calendar: d.calendarId }));
// Wichtig · Fallstricke
- Browser-Unterstützung: Temporal ist neu. Stand Anfang 2025 ist es in Firefox ab Version 139 und in Chrome/Edge ab Version 144 verfügbar, in Safari noch nicht. In Node.js ist es nur mit Flag nutzbar, falls überhaupt. Für den Produktiveinsatz eignet sich ein Polyfill wie
@js-temporal/polyfillodertemporal-polyfill. - Hinweis zur API-Geschichte: Frühe Entwürfe der Spezifikation und alte Polyfill-Versionen boten eine Eigenschaft
calendar, die einTemporal.Calendar-Objekt zurückgab. Diese Eigenschaft und die Klasse wurden gestrichen. Heute gibt es nur nochcalendarIdals String. "iso8601"und"gregory"sind verschiedene Kalender: Monat und Tag stimmen überein, aber"gregory"hat Ären (era/eraYear, z. B."ce"/"bce"),"iso8601"hat keine.equals()gibt deshalb bei gleichem Datumfalsezurück, wenn sich die Kalender unterscheiden.- Rechnen über Kalender hinweg:
until()undsince()werfen einenRangeError, wenn die beiden Daten verschiedene Kalender haben. Deshalb vorhercalendarIdprüfen oder mitwithCalendar()angleichen. - Welche Kalender unterstützt werden, hängt von den ICU-Daten der Engine ab. Mit
Intl.supportedValuesOf(\"calendar\")lässt sich das abfragen. Unbekannte Kennungen führen zu einemRangeError. - Die Eigenschaft ist schreibgeschützt. Zuweisungen werden ignoriert, im Strict Mode gibt es einen
TypeError.