Signatur
Beschreibung
Die Zugriffseigenschaft monthCode gibt den Monat eines Temporal.PlainDate als String zurück. Das Format ist "M", gefolgt von einer zweistelligen Monatsnummer ("M01" bis "M12", in manchen Kalendern auch "M13"). Bei Schaltmonaten kommt ein "L" dazu, z. B. "M05L" für Adar I im hebräischen Kalender.
Anders als month, das nur die fortlaufende Position im Jahr angibt (1-basiert), bleibt monthCode über Jahre hinweg gleich. Im hebräischen Kalender ist Adar in einem Gemeinjahr Monat 6, in einem Schaltjahr aber Monat 7 (Adar II). Der monthCode ist in beiden Fällen "M06". Deshalb eignet sich monthCode für wiederkehrende Ereignisse wie Geburtstage oder Feiertage, für das Vergleichen von Monaten über Jahre hinweg und zum Serialisieren.
Im ISO-8601-Kalender ("iso8601") und im gregorianischen Kalender gibt es keine Schaltmonate. Dort entspricht monthCode einfach "M" plus der zweistelligen month-Zahl. Die Eigenschaft kann nur gelesen werden. Ein geändertes Datum erzeugst du mit with({ monthCode }) oder Temporal.PlainDate.from({ …, monthCode }).
Rückgabewert
"M" + zweistellige Zahl, bei Schaltmonaten mit angehängtem "L" (z. B. "M01", "M12", "M05L").Beispiele
Monatscode im ISO-Kalender
const datum = Temporal.PlainDate.from("2024-03-15");
console.log(datum.month); // fortlaufende Position im Jahr
console.log(datum.monthCode); // stabiler Code
month und monthCode im hebräischen Kalender
// 15. März 2024 fällt ins hebräische Schaltjahr 5784 (Adar II)
const hebr = Temporal.PlainDate.from("2024-03-15").withCalendar("hebrew");
console.log(hebr.year, hebr.month, hebr.monthCode, hebr.day);
// Adar I ist der Schaltmonat
const adar1 = Temporal.PlainDate.from({ calendar: "hebrew", year: 5784, monthCode: "M05L", day: 1 });
console.log(adar1.month, adar1.monthCode);
Wiederkehrendes Datum über monthCode statt month
// Jahrestag im hebräischen Kalender für ein anderes Jahr bestimmen
const ereignis = Temporal.PlainDate.from("2024-03-15").withCalendar("hebrew");
const jahrestag = (datum, jahr) =>
Temporal.PlainDate.from({
calendar: datum.calendarId,
year: jahr,
monthCode: datum.monthCode, // bleibt über Jahre stabil
day: datum.day,
});
const naechstes = jahrestag(ereignis, 5785); // 5785 ist kein Schaltjahr
console.log(naechstes.month, naechstes.monthCode);
console.log(naechstes.withCalendar("iso8601").toString());
Monat mit with() gezielt setzen
const d = Temporal.PlainDate.from("2024-01-31");
// Standard: overflow "constrain" kürzt auf den letzten gültigen Tag
console.log(d.with({ monthCode: "M02" }).toString());
try {
d.with({ monthCode: "M02" }, { overflow: "reject" });
} catch (e) {
console.log(e.constructor.name);
}
// Wichtig · Fallstricke
- Nicht mit
monthverwechseln:monthist die Position im Jahr und verschiebt sich in Kalendern mit Schaltmonaten (hebräisch, chinesisch, dangi). Für Vergleiche und Speicherung über Jahre hinweg nimmst dumonthCode. - Die Eigenschaft ist nur lesbar. Eine Zuweisung wie
datum.monthCode = "M04"ändert nichts und wirft im Strict Mode einenTypeError.Temporal.PlainDateist unveränderlich (immutable). - Übergibst du
monthundmonthCodegleichzeitig anfrom()oderwith(), müssen beide zusammenpassen, sonst gibt es einenRangeError. - Einen Schaltmonat-Code (z. B.
"M05L") in einem Jahr ohne diesen Schaltmonat behandelt Temporal je nach Kalender. Mitoverflow: "constrain"(Standard) wird auf einen passenden Monat ausgewichen. Mit"reject"wird einRangeErrorgeworfen. - Ungültige Formate wie
"3","M3"oder"m03"lösen einenRangeErrorbzw.TypeErroraus. - Kompatibilität: Temporal gibt es bisher nur in neueren Browsern (u. a. Firefox 139+, Chrome 144+). Safari und ältere Node.js-Versionen brauchen einen Polyfill, z. B.
@js-temporal/polyfillodertemporal-polyfill. Nicht-ISO-Kalender setzen außerdem Intl-Unterstützung voraus.