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

Temporal.ZonedDateTime.prototype.calendarId

Eigenschaft

Liefert die Kalender-ID als String (z. B. <code>"iso8601"</code>, <code>"gregory"</code>, <code>"japanese"</code>). Mit diesem Kalender wird das intern gespeicherte ISO-8601-Datum eines <code>ZonedDateTime</code> ausgewertet.

seit JavaScript Temporal-API (TC39): Firefox 139+, Chrome/Edge 144 Kategorie: method-property

Signatur

get Temporal.ZonedDateTime.prototype.calendarId

Beschreibung

calendarId ist eine schreibgeschützte Zugriffseigenschaft (Getter) von Temporal.ZonedDateTime-Instanzen. Ein ZonedDateTime speichert seinen Zeitpunkt intern immer im ISO-8601-Kalender. Der zugeordnete Kalender bestimmt aber, wie die Werte von Eigenschaften wie year, month, monthCode, day, era oder eraYear berechnet werden. Außerdem legt er fest, wie Datumsberechnungen mit add(), subtract() oder until() ablaufen.

Der Rückgabewert ist ein kanonischer, kleingeschriebener Kalenderbezeichner aus dem Unicode-/CLDR-Standard, zum Beispiel "iso8601", "gregory", "japanese", "hebrew", "islamic-umalqura" oder "buddhist". Wenn du beim Erzeugen keinen Kalender angibst, ist der Wert "iso8601".

Die Eigenschaft ist nützlich, wenn du prüfen willst, ob ein Datum aus einer Benutzereingabe oder einer serialisierten Zeichenkette (Annotation [u-ca=…]) in einem bestimmten Kalender vorliegt. Du brauchst sie auch, um Kalender vor Vergleichen oder Berechnungen anzugleichen oder um Kalenderinformationen für die Anzeige zu protokollieren. Zum Ändern des Kalenders verwendest du withCalendar(), denn calendarId hat keinen Setter.

Rückgabewert

Typ
string
Beschreibung
Der kanonische Kalenderbezeichner, z. B. "iso8601", "gregory" oder "japanese". Ohne ausdrückliche Angabe ist er immer "iso8601".

Beispiele

Standardkalender eines ZonedDateTime abfragen

const termin = Temporal.ZonedDateTime.from("2024-03-15T10:30:00[Europe/Berlin]");
console.log(termin.calendarId);
iso8601

Kalender aus einer Zeichenkette mit u-ca-Annotation lesen

const zdt = Temporal.ZonedDateTime.from(
  "2024-03-15T10:30:00+09:00[Asia/Tokyo][u-ca=japanese]"
);
console.log(zdt.calendarId);
console.log(zdt.era, zdt.eraYear); // Ära-Angaben hängen vom Kalender ab
japanese reiwa 6

Kalender wechseln und vor dem Vergleich angleichen

const a = Temporal.ZonedDateTime.from("2024-09-01T12:00:00[Europe/Berlin]");
const b = a.withCalendar("hebrew");

console.log(b.calendarId);   // "hebrew"
console.log(a.equals(b));    // false – equals() prüft auch den Kalender

// Vor dem Vergleich auf denselben Kalender bringen
const gleich = a.equals(b.withCalendar(a.calendarId));
console.log(gleich);
hebrew false true

Eingaben auf ISO-Kalender normalisieren

const normalisieren = (zdt) =>
  zdt.calendarId === "iso8601" ? zdt : zdt.withCalendar("iso8601");

const eingabe = Temporal.ZonedDateTime.from(
  "2024-05-01T08:00:00+07:00[Asia/Bangkok][u-ca=buddhist]"
);
console.log(eingabe.year);                  // 2567 (buddhistische Zählung)
console.log(normalisieren(eingabe).year);   // 2024
2567 2024

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung an calendarId hat keine Wirkung und wirft im Strict Mode einen TypeError. Zum Wechseln des Kalenders verwendest du withCalendar(id), das eine neue Instanz zurückgibt.
  • Kanonisierung: IDs werden kleingeschrieben und kanonisiert. Veraltete Aliase werden auf die kanonische Form abgebildet, z. B. "islamicc" → "islamic-civil". Vergleiche deshalb immer mit dem Wert von calendarId und nicht mit der ursprünglichen Eingabe.
  • "iso8601" ≠ "gregory": Beide ergeben in der Regel dieselben Jahr-, Monats- und Tageswerte. Der gregorianische Kalender kennt aber Ären (era/eraYear), der ISO-Kalender nicht. equals() gibt bei unterschiedlichen Kalendern false zurück.
  • Serialisierung: toString() hängt die Annotation [u-ca=…] standardmäßig nur bei Kalendern an, die nicht ISO sind. Mit der Option calendarName ("always", "never", "critical") lässt sich das steuern.
  • Kompatibilität: Temporal ist noch nicht in allen Engines verfügbar (Firefox 139+, Chrome/Edge 144+, Safari/Node.js teils noch ohne Unterstützung). Für den produktiven Einsatz empfiehlt sich ein Polyfill wie @js-temporal/polyfill oder temporal-polyfill. Welche Kalender außer "iso8601" unterstützt werden, hängt von den Intl-Daten der Engine ab.