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

Temporal.ZonedDateTime.prototype.monthsInYear

Eigenschaft

Gibt als positive ganze Zahl zurück, wie viele Monate das Kalenderjahr dieses <code>Temporal.ZonedDateTime</code> hat. Das Ergebnis hängt vom Kalender ab.

seit JavaScript ES2026 (Temporal) – Firefox 139+, Chrome 144+; noc Kategorie: method-property

Signatur

get Temporal.ZonedDateTime.prototype.monthsInYear

Beschreibung

Die Zugriffseigenschaft monthsInYear gibt an, wie viele Monate das Jahr hat, in dem das Datum einer Temporal.ZonedDateTime-Instanz liegt. Ausschlaggebend ist dabei der Kalender der Instanz, nicht die Zeitzone. Die Zeitzone spielt nur indirekt eine Rolle: Sie bestimmt, auf welches lokale Datum ein Zeitpunkt fällt, und damit auch das Jahr.

Im Standardkalender iso8601 und im gregory-Kalender ist der Wert immer 12. Lunisolare Kalender wie hebrew, chinese oder dangi fügen in Schaltjahren einen zusätzlichen Monat ein. Dort liefert die Eigenschaft je nach Jahr 12 oder 13.

Die Eigenschaft ist nützlich, wenn du über alle Monate eines Jahres iterieren, den letzten Monat eines Jahres ermitteln (zdt.with({ month: zdt.monthsInYear })) oder Eingaben kalenderunabhängig prüfen willst. So vermeidest du fest einprogrammierte Annahmen wie „ein Jahr hat 12 Monate“.

Die Eigenschaft ist schreibgeschützt: Es gibt nur einen Getter, keinen Setter. Temporal-Objekte sind unveränderlich. Ein geändertes Datum erzeugst du mit with(), add() oder withCalendar().

Rückgabewert

Typ
number
Beschreibung
Positive ganze Zahl: die Anzahl der Monate im Kalenderjahr des Datums. Im ISO-/gregorianischen Kalender immer 12, in lunisolaren Kalendern 12 oder 13.

Beispiele

ISO-Kalender: immer 12 Monate

const zdt = Temporal.ZonedDateTime.from("2024-03-15T10:00[Europe/Berlin]");
console.log(zdt.calendarId);
console.log(zdt.monthsInYear);
iso8601 12

Hebräischer Kalender: Schaltjahr mit 13 Monaten

const leap = Temporal.ZonedDateTime.from("2024-03-15T10:00[Europe/Berlin][u-ca=hebrew]");
console.log(leap.year, leap.monthsInYear); // Jahr 5784 ist ein Schaltjahr

const common = Temporal.ZonedDateTime
  .from("2025-03-15T10:00[Europe/Berlin]")
  .withCalendar("hebrew");
console.log(common.year, common.monthsInYear); // Jahr 5785 ist ein Gemeinjahr
5784 13 5785 12

Letzten Monat des Jahres kalenderunabhängig ermitteln

const lastMonthOfYear = (zdt) =>
  zdt.with({ month: zdt.monthsInYear, day: 1 });

const start = Temporal.ZonedDateTime.from("2024-03-15T09:30[Europe/Berlin][u-ca=hebrew]");
const last = lastMonthOfYear(start);
console.log(last.month, last.monthCode);
13 M12

Alle Monate eines Jahres durchlaufen

const zdt = Temporal.ZonedDateTime.from("2024-06-01T00:00[Asia/Shanghai][u-ca=chinese]");
const monthCodes = [];
for (let m = 1; m <= zdt.monthsInYear; m++) {
  monthCodes.push(zdt.with({ month: m, day: 1 }).monthCode);
}
console.log(zdt.monthsInYear, monthCodes.length);
12 12

// Wichtig · Fallstricke

  • Browser-Kompatibilität: Temporal ist noch nicht Baseline. Nativ unterstützt wird es ab Firefox 139 und Chrome/Edge 144. Safari und ältere Node.js-Versionen brauchen einen Polyfill, z. B. @js-temporal/polyfill oder temporal-polyfill.
  • Schreibgeschützt: Eine Zuweisung wie zdt.monthsInYear = 13 hat keine Wirkung. Im Strict Mode, also auch in ES-Modulen, löst sie einen TypeError aus.
  • Monatsnummer ist nicht gleich Monatscode: In lunisolaren Schaltjahren verschieben sich die Monatsnummern. Im hebräischen Kalender hat Adar I den Code M05L, danach haben die Monate eine um 1 höhere Nummer. Wenn du einen bestimmten Monat jahresübergreifend meinst, verwende monthCode statt month.
  • Zeitzone beachten: Rund um Mitternacht zum Jahreswechsel kann derselbe Zeitpunkt (Instant) in verschiedenen Zeitzonen in unterschiedliche Jahre fallen. In lunisolaren Kalendern kann monthsInYear dann einen anderen Wert haben.
  • Die Kalenderdaten für nicht-ISO-Kalender stammen aus der Intl-/ICU-Unterstützung der Laufzeitumgebung. Bei Node.js-Builds mit small-icu können einige Kalender fehlen.