Signatur
Beschreibung
Die Zugriffseigenschaft monthCode liefert den Monat eines Temporal.PlainYearMonth als String im Format "M" + zweistellige Nummer, z. B. "M01" bis "M12". In Kalendern mit Schaltmonaten (etwa dem hebräischen oder dem chinesischen Kalender) bekommen Schaltmonate zusätzlich das Suffix L („leap“), z. B. "M05L" für Adar I.
Der wichtige Unterschied zu month: month ist die fortlaufende Position des Monats im jeweiligen Jahr (1-basiert) und kann sich je nach Jahr verschieben, wenn es einen Schaltmonat gibt. monthCode bleibt dagegen für denselben Monat über alle Jahre hinweg stabil. Im ISO-8601-Kalender (Standard) entsprechen sich beide direkt: month === 3 heißt dann immer monthCode === "M03".
Setzen Sie monthCode ein, wenn Sie einen Monat kalenderübergreifend oder über mehrere Jahre hinweg eindeutig ansprechen wollen – etwa für wiederkehrende Ereignisse wie „jedes Jahr im Adar“ oder beim Speichern und Wiederherstellen von Nutzereingaben in nicht-gregorianischen Kalendern. Die Eigenschaft kann nur gelesen werden. Wenn Sie den Monat ändern wollen, erzeugen Sie mit with({ monthCode }) eine neue Instanz oder verwenden Temporal.PlainYearMonth.from({ year, monthCode, calendar }).
Rückgabewert
"M01"–"M12" (bzw. "M13" in Kalendern mit 13 Monaten) und optional mit Suffix L für Schaltmonate, z. B. "M05L".Beispiele
Monatscode im ISO-Kalender auslesen
const ym = Temporal.PlainYearMonth.from("2024-03");
console.log(ym.monthCode); // stabiler Code
console.log(ym.month); // Position im Jahr
Schaltmonat im hebräischen Kalender
// 5784 ist ein hebräisches Schaltjahr mit Adar I (M05L) und Adar II (M06)
const adarI = Temporal.PlainYearMonth.from({
year: 5784,
monthCode: "M05L",
calendar: "hebrew"
});
console.log(adarI.monthCode); // Schaltmonat
console.log(adarI.month); // 6. Monat dieses Jahres
console.log(adarI.inLeapYear);
Warum monthCode statt month: gleicher Monat, andere Position
const adar5783 = Temporal.PlainYearMonth.from({ year: 5783, monthCode: "M06", calendar: "hebrew" });
const adar5784 = Temporal.PlainYearMonth.from({ year: 5784, monthCode: "M06", calendar: "hebrew" });
// Derselbe Monat (Adar bzw. Adar II) – aber unterschiedliche Position
console.log(adar5783.monthCode, adar5783.month);
console.log(adar5784.monthCode, adar5784.month);
// Wiederkehrende Ereignisse daher über monthCode vergleichen
const istAdar = (ym) => ym.monthCode === "M06";
console.log(istAdar(adar5783), istAdar(adar5784));
Monat per with() über monthCode ändern
const start = Temporal.PlainYearMonth.from("2025-04");
const dezember = start.with({ monthCode: "M12" });
console.log(dezember.toString());
console.log(start.monthCode); // Original bleibt unverändert (immutable)
// Wichtig · Fallstricke
- Nur lesbar: Da die Eigenschaft keinen Setter hat, wird
ym.monthCode = "M05"im nicht-strikten Modus stillschweigend ignoriert und löst im Strict Mode (z. B. in ES-Modulen) einenTypeErroraus. Verwenden Sie stattdessenwith(). - Nicht mit
monthverwechseln: In Kalendern mit Schaltmonaten istmonthkeine verlässliche Monatskennung. Für Speicherung, Vergleiche und wiederkehrende Termine eignet sichmonthCodebesser. - Widersprüche: Übergeben Sie
monthundmonthCodegleichzeitig anfrom()oderwith()und passen die Werte nicht zusammen, wird einRangeErrorausgelöst. Einen Schaltmonatscode in einem Nicht-Schaltjahr (z. B."M05L"im Jahr 5783) behandeltoverflow: "constrain"(Standard) durch Anpassen, mitoverflow: "reject"gibt es einenRangeError. - Kompatibilität: Temporal ist neu und noch nicht Baseline. Unterstützt wird es in Firefox ab 139 und Chrome/Edge ab 144, Safari fehlt noch. Für ältere Umgebungen gibt es Polyfills wie
@js-temporal/polyfillodertemporal-polyfill. Nicht-ISO-Kalender brauchen außerdem Intl-Daten.