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

Temporal.PlainDateTime.prototype.month

Eigenschaft

Gibt den Monat eines <code>Temporal.PlainDateTime</code> als positive Ganzzahl zurück, beginnend bei 1, bezogen auf das Jahr im jeweiligen Kalender.

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

Signatur

get Temporal.PlainDateTime.prototype.month

Beschreibung

Die Accessor-Eigenschaft month liefert den 1-basierten Monatsindex eines Temporal.PlainDateTime. Anders als bei Date.prototype.getMonth(), das bei 0 beginnt, steht im ISO-8601-Kalender 1 für Januar und 12 für Dezember. Das häufige „+1“ beim Umgang mit Date entfällt damit.

Der Wert hängt vom Kalender der Instanz ab. In Kalendern mit Schaltmonaten, etwa dem hebräischen oder dem chinesischen Kalender, kann ein Jahr 13 Monate haben. Monate mit demselben Namen können dann je nach Jahr eine andere Nummer tragen. month ist also immer die fortlaufende Position im jeweiligen Jahr (von 1 bis monthsInYear). Wenn du einen Monat unabhängig vom Jahr eindeutig bestimmen willst, zum Beispiel für wiederkehrende Termine, nimm stattdessen monthCode (etwa "M05L" für einen Schaltmonat).

Die Eigenschaft kann nur gelesen werden. Temporal-Objekte sind unveränderlich. Einen anderen Monat bekommst du über with({ month }), das eine neue Instanz zurückgibt. Zum Vor- und Zurückspringen um Monate nimmst du add() bzw. subtract() mit { months: n }.

Rückgabewert

Typ
number
Beschreibung
Positive Ganzzahl von 1 bis monthsInYear (im ISO-Kalender 1–12, in Kalendern mit Schaltmonaten bis 13).

Beispiele

Monat eines Datums mit Uhrzeit auslesen

const termin = Temporal.PlainDateTime.from("2024-03-15T10:30:00");

console.log(termin.month);        // 1-basiert: März = 3
console.log(termin.monthsInYear); // Monate im Jahr (ISO)

// Vergleich mit Date: getMonth() beginnt bei 0
console.log(new Date(2024, 2, 15).getMonth());
3 12 2

Monat gezielt ändern mit with() und overflow

const ende = Temporal.PlainDateTime.from("2024-01-31T10:30:00");

// Standard: overflow "constrain" – der Tag wird an den kürzeren Monat angepasst
const feb = ende.with({ month: 2 });
console.log(feb.toString());

// Mit overflow "reject" wird stattdessen ein Fehler geworfen
try {
  ende.with({ month: 2 }, { overflow: "reject" });
} catch (err) {
  console.log(err.name);
}

console.log(ende.month); // Original bleibt unverändert
2024-02-29T10:30:00 RangeError 1

Nicht-gregorianischer Kalender: month vs. monthCode

// 15. März 2024 fällt im hebräischen Schaltjahr 5784 in den Monat Adar II
const dt = Temporal.PlainDateTime.from("2024-03-15T12:00:00[u-ca=hebrew]");

console.log(dt.year);         // hebräisches Jahr
console.log(dt.month);        // Position im Jahr (Schaltmonat verschiebt die Zählung)
console.log(dt.monthCode);    // stabiler Monatscode
console.log(dt.monthsInYear); // Schaltjahr mit 13 Monaten
5784 7 M06 13

Monatsbericht: Termine nach Monat gruppieren

const buchungen = [
  "2024-01-05T09:00",
  "2024-01-20T14:15",
  "2024-02-11T08:45",
  "2024-04-02T17:30",
].map((s) => Temporal.PlainDateTime.from(s));

const proMonat = Object.groupBy(buchungen, (b) => b.month);

for (const [monat, liste] of Object.entries(proMonat)) {
  console.log(`Monat ${monat}: ${liste.length} Buchung(en)`);
}
Monat 1: 2 Buchung(en) Monat 2: 1 Buchung(en) Monat 4: 1 Buchung(en)

// Wichtig · Fallstricke

  • 1-basiert: Anders als Date.prototype.getMonth() beginnt month bei 1. Wer Code von Date auf Temporal umstellt, muss vorhandene + 1/- 1-Korrekturen entfernen.
  • Kalenderabhängig: In Kalendern mit Schaltmonaten (hebräisch, chinesisch, dangi) bezeichnet dieselbe Nummer nicht immer denselben Monat. Für Vergleiche über mehrere Jahre hinweg und für Wiederholungsregeln nimm monthCode.
  • Nur lesbar: Eine Zuweisung wie dt.month = 5 hat keine Wirkung und wirft im Strict Mode einen TypeError. Verwende with({ month: 5 }).
  • Überlauf: with({ month }) passt ungültige Tage standardmäßig an (overflow: "constrain"), also zum Beispiel 31. Januar → 29. Februar. Mit overflow: "reject" gibt es stattdessen einen RangeError.
  • Kompatibilität: Temporal ist neu. Unterstützt wird es in Firefox ab 139 und in Chromium-Browsern ab 144. Safari unterstützt es noch nicht vollständig. Für ältere Umgebungen gibt es Polyfills wie @js-temporal/polyfill oder temporal-polyfill.