Signatur
Beschreibung
Die Zugriffseigenschaft monthsInYear gibt an, wie viele Monate das Jahr hat, zu dem ein Temporal.PlainYearMonth gehört. Beim Standardkalender iso8601 (gregorianisch) ist der Wert immer 12.
Interessant wird die Eigenschaft bei Lunisolarkalendern wie hebrew oder chinese. Dort bekommen Schaltjahre einen zusätzlichen Schaltmonat, das Jahr hat dann 13 Monate. Wenn Sie über alle Monate eines Jahres laufen, sollten Sie deshalb nie fest 12 als Obergrenze schreiben, sondern monthsInYear verwenden. So funktioniert der Code in jedem Kalender.
Die Eigenschaft ist schreibgeschützt: Sie hat nur einen Getter und keinen Setter. Den Monat selbst ändern Sie mit with(). Mit month und monthCode finden Sie die Position des Monats innerhalb des Jahres heraus.
Rückgabewert
12, hebräisch: 12 oder 13).Beispiele
ISO-Kalender: immer 12 Monate
const ym = Temporal.PlainYearMonth.from("2024-02");
console.log(ym.monthsInYear);
console.log(ym.calendarId);
Hebräischer Kalender: normales Jahr und Schaltjahr
const schaltjahr = Temporal.PlainYearMonth.from({ year: 5784, month: 1, calendar: "hebrew" });
const normaljahr = Temporal.PlainYearMonth.from({ year: 5785, month: 1, calendar: "hebrew" });
console.log(schaltjahr.monthsInYear, schaltjahr.inLeapYear);
console.log(normaljahr.monthsInYear, normaljahr.inLeapYear);
Alle Monate eines Jahres durchlaufen, egal welcher Kalender
const alleMonate = (ym) => {
const codes = [];
// monthsInYear statt fest 12 verwenden
for (let m = 1; m <= ym.monthsInYear; m++) {
codes.push(ym.with({ month: m }).monthCode);
}
return codes;
};
const ym = Temporal.PlainYearMonth.from({ year: 5784, month: 1, calendar: "hebrew" });
console.log(alleMonate(ym).join(", "));
Letzten Monat des Jahres bestimmen
const ym = Temporal.PlainYearMonth.from("2025-03");
const letzter = ym.with({ month: ym.monthsInYear });
console.log(letzter.toString());
// Wichtig · Fallstricke
- Browser-Unterstützung: Temporal ist noch recht neu. Es läuft in Firefox ab Version 139 und in Chromium-Browsern ab Version 144. Safari und ältere Umgebungen brauchen ein Polyfill wie
@js-temporal/polyfillodertemporal-polyfill. - Nicht fest mit 12 rechnen: In Lunisolarkalendern ist
monthnur eine laufende Nummer. Im hebräischen Schaltjahr ist z. B. Monat6der Schaltmonat Adar I (M05L) und nicht der sonst übliche sechste Monat. Einen bestimmten Monat erkennen Sie zuverlässig ammonthCode. - Schreibgeschützt: Eine Zuweisung wie
ym.monthsInYear = 13wird im nicht-strikten Modus stillschweigend ignoriert und löst im strikten Modus einenTypeErroraus. - Ob der Getter auf ein fremdes Objekt angewendet werden darf, wird geprüft:
Object.getOwnPropertyDescriptor(Temporal.PlainYearMonth.prototype, \"monthsInYear\").get.call({})wirft einenTypeError.