Signatur
Beschreibung
Die schreibgeschützte Accessor-Eigenschaft monthsInYear gibt an, wie viele Monate das Kalenderjahr hat, in dem ein Temporal.PlainDateTime liegt. Die Uhrzeit spielt dabei keine Rolle. Es zählt nur der Datumsanteil zusammen mit dem Kalender der Instanz.
Im ISO-8601-Kalender (Standard) und im gregorianischen Kalender ist der Wert immer 12. Lunisolare Kalender wie der hebräische ("hebrew") oder der chinesische ("chinese") fügen in manchen Jahren einen Schaltmonat ein. Dann ist der Wert 13. Deshalb gibt es diese Eigenschaft: Code, der mit mehreren Kalendern funktionieren soll, darf nicht fest von 12 Monaten ausgehen.
Typische Anwendungsfälle:
- Alle Monate eines Jahres durchlaufen, z. B. für Kalenderansichten und Monatsauswahlen
- Den letzten Monat des Jahres bestimmen:
dt.with({ month: dt.monthsInYear }) - Schaltjahre in lunisolaren Kalendern erkennen
Die Eigenschaft gibt es auch mit derselben Bedeutung auf Temporal.PlainDate, Temporal.PlainYearMonth und Temporal.ZonedDateTime.
Rückgabewert
12, in lunisolaren Kalendern je nach Jahr 12 oder 13.Beispiele
ISO-Kalender: immer 12 Monate
const termin = Temporal.PlainDateTime.from("2024-03-15T10:30");
console.log(termin.monthsInYear);
console.log(termin.calendarId);
Hebräischer Kalender: Schaltjahr mit 13 Monaten
const dt = Temporal.PlainDateTime.from("2024-03-15T10:30");
// Gleicher Zeitpunkt, dargestellt im hebräischen Kalender (Jahr 5784)
const hebraeisch = dt.withCalendar("hebrew");
console.log(hebraeisch.year, hebraeisch.monthsInYear);
// Das Folgejahr 5785 ist kein Schaltjahr
const folgejahr = hebraeisch.add({ years: 1 });
console.log(folgejahr.year, folgejahr.monthsInYear);
Alle Monate eines Jahres kalenderunabhängig durchlaufen
const alleMonate = (dt) => {
const ergebnis = [];
for (let m = 1; m <= dt.monthsInYear; m++) {
ergebnis.push(dt.with({ month: m, day: 1 }).monthCode);
}
return ergebnis;
};
const dt = Temporal.PlainDateTime.from("2024-03-15T08:00").withCalendar("hebrew");
console.log(alleMonate(dt).join(", "));
Letzten Monat des Jahres bestimmen
const start = Temporal.PlainDateTime.from("2025-06-10T09:15");
const letzterMonat = start.with({ month: start.monthsInYear, day: 1 });
console.log(letzterMonat.toString());
// Wichtig · Fallstricke
- Nicht fest mit 12 rechnen: Schleifen wie
for (let m = 1; m <= 12; m++)funktionieren in lunisolaren Kalendern nicht richtig. Verwende stattdessenmonthsInYear. monthundmonthCode: In Schaltjahren verschiebt sich die Monatsnummer (month). Im hebräischen Schaltjahr hat z. B. Adar II denmonth-Wert 7 und den Code"M06", der Schaltmonat Adar I den Code"M05L". Wenn ein Monat über mehrere Jahre hinweg gleich bleiben soll, speicheremonthCodestattmonth.- Schreibgeschützt: Die Eigenschaft hat keinen Setter. Eine Zuweisung wird ignoriert bzw. löst im Strict Mode einen
TypeErroraus. Um das Datum zu ändern, nutzewith(). - Wird der Getter auf einem Objekt aufgerufen, das kein
Temporal.PlainDateTimeist (z. B. übercall), entsteht einTypeError. - Kompatibilität: Temporal ist erst seit Kurzem verfügbar: Firefox ab 139, Chromium-Browser ab 144. Safari unterstützt es noch nicht. Nicht-ISO-Kalender brauchen außerdem eine Umgebung mit vollständigen Intl-Daten. Für ältere Umgebungen gibt es den Polyfill
@js-temporal/polyfill.