Signatur
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
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());
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
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
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)`);
}
// Wichtig · Fallstricke
- 1-basiert: Anders als
Date.prototype.getMonth()beginntmonthbei 1. Wer Code vonDateauf 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 = 5hat keine Wirkung und wirft im Strict Mode einenTypeError. Verwendewith({ month: 5 }). - Überlauf:
with({ month })passt ungültige Tage standardmäßig an (overflow: "constrain"), also zum Beispiel 31. Januar → 29. Februar. Mitoverflow: "reject"gibt es stattdessen einenRangeError. - 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/polyfillodertemporal-polyfill.