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

Temporal.PlainYearMonth.prototype.calendarId

Eigenschaft

Gibt den Bezeichner des Kalenders als String zurück (z. B. <code>"iso8601"</code> oder <code>"hebrew"</code>), mit dem das interne ISO-8601-Datum eines <code>Temporal.PlainYearMonth</code> interpretiert wird.

seit JavaScript Temporal (ES-Proposal Stage 3); Firefox 139+, Chro Kategorie: method-property

Signatur

get Temporal.PlainYearMonth.prototype.calendarId

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

Typ
string
Beschreibung
Der kanonische Kalenderbezeichner in Kleinbuchstaben, z. B. "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());
iso8601 2024-03

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);
japanese reiwa 6 3

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));
Unterschiedliche Kalender: iso8601 vs. hebrew false

Bezeichner werden kanonisiert

const ym = Temporal.PlainYearMonth.from({ year: 2024, month: 5, calendar: "GREGORY" });
console.log(ym.calendarId);
gregory

// Wichtig · Fallstricke

  • Nur lesbar: Eine Zuweisung an calendarId hat keine Wirkung und löst im Strict Mode einen TypeError aus. Anders als PlainDate hat PlainYearMonth keine Methode withCalendar(). Um den Kalender zu wechseln, geht man über toPlainDate({ day: 1 }).withCalendar(id).toPlainYearMonth().
  • Frühere API: In älteren Entwürfen und Polyfill-Versionen gab es die Eigenschaft calendar, die ein Temporal.Calendar-Objekt lieferte. Diese Objekte wurden aus dem Proposal entfernt. Heute gibt es nur noch den String calendarId.
  • 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 Kalendern false zurü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/polyfill oder temporal-polyfill. Welche Kalender unterstützt werden, hängt von den Intl-Daten der Engine ab.