Start · Sprachen · JavaScript · Referenz · Temporal.PlainYearMonth.prototype.monthsInYear

Temporal.PlainYearMonth.prototype.monthsInYear

Eigenschaft

Gibt die Anzahl der Monate im Jahr eines <code>Temporal.PlainYearMonth</code> als positive ganze Zahl zurück. Das Ergebnis hängt vom Kalender ab.

seit JavaScript Temporal (ES-Proposal Stage 3); Firefox 139+, Chro Kategorie: method-property

Signatur

get Temporal.PlainYearMonth.prototype.monthsInYear

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

Typ
number
Beschreibung
Positive ganze Zahl: die Anzahl der Monate im Jahr, abhängig vom Kalender des Objekts (ISO: immer 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);
12 iso8601

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);
13 true 12 false

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(", "));
M01, M02, M03, M04, M05, M05L, M06, M07, M08, M09, M10, M11, M12

Letzten Monat des Jahres bestimmen

const ym = Temporal.PlainYearMonth.from("2025-03");
const letzter = ym.with({ month: ym.monthsInYear });
console.log(letzter.toString());
2025-12

// 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/polyfill oder temporal-polyfill.
  • Nicht fest mit 12 rechnen: In Lunisolarkalendern ist month nur eine laufende Nummer. Im hebräischen Schaltjahr ist z. B. Monat 6 der Schaltmonat Adar I (M05L) und nicht der sonst übliche sechste Monat. Einen bestimmten Monat erkennen Sie zuverlässig am monthCode.
  • Schreibgeschützt: Eine Zuweisung wie ym.monthsInYear = 13 wird im nicht-strikten Modus stillschweigend ignoriert und löst im strikten Modus einen TypeError aus.
  • Ob der Getter auf ein fremdes Objekt angewendet werden darf, wird geprüft: Object.getOwnPropertyDescriptor(Temporal.PlainYearMonth.prototype, \"monthsInYear\").get.call({}) wirft einen TypeError.