Signatur
Beschreibung
Die Accessor-Eigenschaft monthCode liefert den Monat eines Temporal.PlainDateTime als String im Format "M" + zweistellige Monatsnummer, z. B. "M01" für Januar. In Kalendern mit Schaltmonaten (etwa dem hebräischen oder chinesischen Kalender) hängt am Ende ein "L" an, z. B. "M05L" für den Schaltmonat Adar I.
Der Unterschied zu month: month ist ein fortlaufender Index (1, 2, 3, …) innerhalb des jeweiligen Jahres. In Jahren mit Schaltmonat verschiebt sich dieser Index. monthCode dagegen bezeichnet einen Monat über Jahre hinweg gleich. Deshalb ist es die richtige Wahl für jährlich wiederkehrende Ereignisse wie Geburtstage, Feiertage oder Jahrestage.
Im ISO-8601-Kalender (Standard) und im gregorianischen Kalender entspricht monthCode immer "M" + month mit zwei Stellen. Die Eigenschaft ist schreibgeschützt. Für ein geändertes Datum nutzt man with({ monthCode }).
Rückgabewert
"M03" oder "M05L" für einen Schaltmonat.Beispiele
Monatscode im ISO-Kalender auslesen
const dt = Temporal.PlainDateTime.from("2024-03-15T10:30:00");
console.log(dt.month); // 3
console.log(dt.monthCode); // "M03"
Schaltmonat im hebräischen Kalender
// 2024 ist im hebräischen Kalender ein Schaltjahr (5784)
const dt = Temporal.PlainDateTime.from("2024-03-01T12:00:00").withCalendar("hebrew");
console.log(dt.month); // 6 (fortlaufender Index)
console.log(dt.monthCode); // "M05L" (Adar I, Schaltmonat)
Jährliches Ereignis mit monthCode übertragen
// Termin im gleichen Kalendermonat im Folgejahr – robust auch bei Schaltmonaten
const termin = Temporal.PlainDateTime.from("2024-06-20T09:00:00");
const naechstesJahr = termin.with({ year: termin.year + 1, monthCode: termin.monthCode });
console.log(naechstesJahr.toString());
Nach Monat filtern
const termine = [
"2024-01-10T08:00", "2024-05-02T14:00", "2025-01-22T09:30"
].map((s) => Temporal.PlainDateTime.from(s));
const januar = termine.filter((t) => t.monthCode === "M01");
console.log(januar.map(String));
// Wichtig · Fallstricke
- Nicht mit
monthgleichsetzen: In Kalendern mit Schaltmonaten kann derselbemonth-Index in verschiedenen Jahren für unterschiedliche Monate stehen. Für Vergleiche über Jahresgrenzen hinweg immermonthCodeverwenden. - Gibt man in
with()oderfrom()sowohlmonthals auchmonthCodean, müssen beide zusammenpassen. Sonst wird einRangeErrorgeworfen. - Ein Schaltmonats-Code wie
\"M05L\"in einem Nicht-Schaltjahr wird mitoverflow: \"constrain\"(Standard) auf einen benachbarten Monat angepasst. Mitoverflow: \"reject\"gibt es einenRangeError. - Nur lesbar: Eine Zuweisung an
dt.monthCodehat keine Wirkung und wirft im Strict Mode einenTypeError. - Kompatibilität: Temporal ist noch nicht in allen Browsern verfügbar (u. a. fehlt Safari-Unterstützung). Für den Produktiveinsatz einen Polyfill wie
@js-temporal/polyfillodertemporal-polyfillverwenden.