Signatur
Beschreibung
Die Zugriffseigenschaft monthCode gibt den Monat eines Temporal.PlainMonthDay als Monatscode zurück. Der Code hat die Form "M" + zweistellige Monatsnummer, also etwa "M01" bis "M12" im ISO-8601-Kalender. In Lunisolarkalendern wie dem chinesischen oder dem hebräischen Kalender werden Schaltmonate mit angehängtem "L" gekennzeichnet, z. B. "M05L" für den hebräischen Adar I.
Anders als Temporal.PlainDate hat PlainMonthDay keine Eigenschaft month. Das liegt daran, dass eine Monatsnummer ohne Jahresangabe in manchen Kalendern nicht eindeutig ist: Ob ein Monat der 6. oder 7. des Jahres ist, hängt davon ab, ob es ein Schaltjahr mit Schaltmonat gibt. Der monthCode dagegen bezeichnet den Monat immer gleich, egal in welchem Jahr.
Die Eigenschaft eignet sich gut für jährlich wiederkehrende Termine wie Geburtstage, Feiertage oder Jahrestage. Man kann damit zwei Monat-Tag-Werte vergleichen, den Monat eines PlainMonthDay gezielt über with({ monthCode }) ändern oder Werte gruppieren und sortieren.
Die Eigenschaft kann nur gelesen werden. Ihr Setter ist undefined. Um den Monat zu ändern, erzeugt man mit with() ein neues Objekt, denn Temporal-Objekte sind unveränderlich.
Rückgabewert
"M01" bis "M12" im ISO-Kalender oder "M05L" für einen Schaltmonat in Lunisolarkalendern.Beispiele
Monatscode eines ISO-Monat-Tag-Werts lesen
const heiligabend = Temporal.PlainMonthDay.from("12-24");
console.log(heiligabend.monthCode);
console.log(heiligabend.day);
// Es gibt keine month-Eigenschaft
console.log(heiligabend.month);
Monat über with() ändern
const termin = Temporal.PlainMonthDay.from({ month: 3, day: 15 });
console.log(termin.monthCode);
// Neues Objekt erzeugen – das Original bleibt unverändert
const verschoben = termin.with({ monthCode: "M04" });
console.log(verschoben.toString());
console.log(termin.toString());
Prüfen, ob heute Geburtstag ist
const geburtstag = Temporal.PlainMonthDay.from("07-09");
const heute = Temporal.Now.plainDateISO();
const istGeburtstag =
heute.monthCode === geburtstag.monthCode && heute.day === geburtstag.day;
console.log(istGeburtstag ? "Alles Gute!" : "Heute nicht.");
// Einfacher: equals() vergleicht Monatscode, Tag und Kalender
console.log(heute.toPlainMonthDay().equals(geburtstag));
Schaltmonat im hebräischen Kalender
const datum = Temporal.PlainDate.from({
year: 5784,
monthCode: "M05L", // Adar I (Schaltmonat)
day: 10,
calendar: "hebrew"
});
const md = datum.toPlainMonthDay();
console.log(md.monthCode);
console.log(datum.month); // Ordnungsnummer im konkreten Jahr
// Wichtig · Fallstricke
- Kein
month:PlainMonthDayhat keine Eigenschaftmonth. Ein Zugriff darauf liefertundefined. Nutze stattdessenmonthCode. - Nicht nach Zahl vergleichen: Der Monatscode ist ein String. Im ISO-Kalender lässt er sich dank führender Null zwar lexikografisch sortieren, in Lunisolarkalendern mit Schaltmonaten wie
"M05L"ergibt das aber keine sinnvolle Reihenfolge. - Nur lesbar: Eine Zuweisung wie
md.monthCode = "M02"hat keine Wirkung. Im strikten Modus wirft sie einenTypeError. Verwendewith(). - Ungültige Codes:
with({ monthCode: "M13" })oder ein falsch geformter Code löst einenRangeErroraus. Dasselbe gilt für einen Schaltmonat in einem Kalender, der keinen solchen kennt. - Kompatibilität: Temporal ist neu und wird noch nicht von allen Browsern und Node.js-Versionen unterstützt. Für ältere Umgebungen gibt es einen Polyfill, z. B.
@js-temporal/polyfillodertemporal-polyfill.