Signatur
Beschreibung
Die Accessor-Eigenschaft monthCode gibt den Monat einer Temporal.ZonedDateTime als String im Format "M" + zweistellige Monatsnummer zurück, also z. B. "M01" bis "M12". In Kalendern mit Schaltmonaten, etwa dem hebräischen oder dem chinesischen Kalender, bekommt ein Schaltmonat zusätzlich das Suffix "L" (z. B. "M05L" für Adar I im hebräischen Kalender).
Anders als month ist monthCode unabhängig vom Jahr. month ist nur die fortlaufende Position im jeweiligen Jahr und kann sich in Schaltjahren verschieben. Deshalb eignet sich monthCode für wiederkehrende Ereignisse wie Geburtstage oder Feiertage. Man speichert monthCode und day und baut daraus für jedes Jahr das passende Datum.
Im ISO-8601-Kalender (iso8601) und im gregorianischen Kalender entspricht monthCode immer "M" + month mit führender Null. Die Eigenschaft ist nur lesbar. Um den Monat zu ändern, benutzt man with({ monthCode }). Das erzeugt eine neue Instanz, weil Temporal-Objekte unveränderlich sind.
Rückgabewert
"M" + zwei Ziffern, bei Schaltmonaten mit angehängtem "L", z. B. "M03" oder "M05L".Beispiele
Monatscode im ISO-Kalender auslesen
const zdt = Temporal.ZonedDateTime.from("2024-07-15T09:30:00[Europe/Berlin]");
console.log(zdt.month); // Position im Jahr
console.log(zdt.monthCode); // jahresunabhängiger Code
Schaltmonat im hebräischen Kalender
// Das hebräische Jahr 5784 ist ein Schaltjahr mit Adar I (M05L)
const zdt = Temporal.ZonedDateTime.from("2024-03-01T12:00:00[Asia/Jerusalem]")
.withCalendar("hebrew");
console.log(zdt.month, zdt.monthCode, zdt.monthsInYear);
Jährlich wiederkehrenden Termin über monthCode berechnen
const termin = Temporal.ZonedDateTime.from("2023-11-20T18:00:00[Europe/Berlin]");
const { monthCode, day } = termin;
// Gleicher Termin im nächsten Jahr, unabhängig von Schaltmonaten
const naechstes = termin.with({ year: termin.year + 1, monthCode, day });
console.log(naechstes.toString());
Monat per monthCode setzen
const zdt = Temporal.ZonedDateTime.from("2024-01-31T08:00:00[Europe/Berlin]");
// Standard-Überlauf "constrain": 31. Feb. → 29. Feb. 2024
const feb = zdt.with({ monthCode: "M02" });
console.log(feb.toPlainDate().toString());
// Wichtig · Fallstricke
- Nicht mit
monthverwechseln: Im hebräischen Kalender ist z. B.month6 in einem Schaltjahr"M05L", in einem normalen Jahr aber"M06". Wiederkehrende Daten sollte man deshalb immer übermonthCodespeichern. - Übergibt man in
with()oderfrom()sowohlmonthals auchmonthCodeund passen die beiden nicht zusammen, wird einRangeErrorgeworfen. - Ein Schaltmonat-Code wie
"M05L"in einem Jahr ohne Schaltmonat wird mitoverflow: "constrain"auf einen benachbarten Monat abgebildet. Mitoverflow: "reject"gibt es einenRangeError. - Die Eigenschaft ist nur lesbar. Eine Zuweisung wird ignoriert, im Strict Mode gibt es einen
TypeError. - Kompatibilität: Temporal gibt es erst seit Kurzem in Browsern (Firefox 139+, Chrome 144+). Safari und ältere Umgebungen brauchen ein Polyfill, z. B.
@js-temporal/polyfillodertemporal-polyfill. Welche Kalender außerhalb von ISO unterstützt werden, hängt von den Intl-Daten der Umgebung ab.