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

Temporal.PlainDateTime.prototype.monthsInYear

Eigenschaft

Gibt die Anzahl der Monate im Jahr dieses <code>Temporal.PlainDateTime</code> als positive ganze Zahl zurück. Der Wert hängt vom Kalender ab.

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

Signatur

get Temporal.PlainDateTime.prototype.monthsInYear

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

Typ
number
Beschreibung
Eine positive ganze Zahl: die Anzahl der Monate im Kalenderjahr dieses Datums. Im ISO-Kalender ist das immer 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);
12 iso8601

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);
5784 13 5785 12

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

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());
2025-12-01T09:15:00

// Wichtig · Fallstricke

  • Nicht fest mit 12 rechnen: Schleifen wie for (let m = 1; m <= 12; m++) funktionieren in lunisolaren Kalendern nicht richtig. Verwende stattdessen monthsInYear.
  • month und monthCode: In Schaltjahren verschiebt sich die Monatsnummer (month). Im hebräischen Schaltjahr hat z. B. Adar II den month-Wert 7 und den Code "M06", der Schaltmonat Adar I den Code "M05L". Wenn ein Monat über mehrere Jahre hinweg gleich bleiben soll, speichere monthCode statt month.
  • Schreibgeschützt: Die Eigenschaft hat keinen Setter. Eine Zuweisung wird ignoriert bzw. löst im Strict Mode einen TypeError aus. Um das Datum zu ändern, nutze with().
  • Wird der Getter auf einem Objekt aufgerufen, das kein Temporal.PlainDateTime ist (z. B. über call), entsteht ein TypeError.
  • 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.