Signatur
Beschreibung
Die Accessor-Eigenschaft month gibt eine positive Ganzzahl zurück: die Position des Monats innerhalb des Jahres. Die Zählung beginnt bei 1, nicht bei 0 wie bei Date.prototype.getMonth(). Im ISO-8601-Kalender (Gregorianischer Kalender) steht 1 für Januar und 12 für Dezember.
Der Wert hängt vom Kalender des Datums ab. In Kalendern mit Schaltmonaten, etwa dem hebräischen oder dem chinesischen Kalender, ist month ein reiner fortlaufender Index. Derselbe benannte Monat kann dort je nach Jahr eine andere Nummer haben. Für eine kalenderunabhängige, eindeutige Kennung gibt es monthCode (z. B. "M05L" für einen Schaltmonat).
Die Eigenschaft ist nur lesbar, einen Setter gibt es nicht. Um den Monat zu ändern, erzeugt man mit with({ month }) ein neues, unveränderliches PlainDate. Wie viele Monate ein Jahr hat, verrät monthsInYear.
Rückgabewert
1 bis monthsInYear (im ISO-Kalender 1–12).Beispiele
Monat eines ISO-Datums auslesen
const datum = Temporal.PlainDate.from("2024-03-15");
console.log(datum.month);
console.log(datum.monthCode);
Monat ändern mit with() und Monatsende korrekt behandeln
const datum = Temporal.PlainDate.from("2024-01-31");
// Standard overflow: "constrain" – Tag wird auf Monatsende gekürzt
const februar = datum.with({ month: 2 });
console.log(februar.toString());
// Streng: Fehler werfen statt korrigieren
try {
datum.with({ month: 2 }, { overflow: "reject" });
} catch (e) {
console.log(e.constructor.name);
}
Alle Monate eines Jahres durchlaufen
const jahr = Temporal.PlainDate.from("2025-01-01");
for (let m = 1; m <= jahr.monthsInYear; m++) {
const ersterTag = jahr.with({ month: m });
const name = ersterTag.toLocaleString("de-DE", { month: "long" });
console.log(`${ersterTag.month}: ${name} (${ersterTag.daysInMonth} Tage)`);
}
Schaltmonat im hebräischen Kalender
// 5784 ist ein hebräisches Schaltjahr mit 13 Monaten
const d = Temporal.PlainDate.from({ year: 5784, monthCode: "M06", day: 1, calendar: "hebrew" });
console.log(d.monthsInYear, d.month, d.monthCode);
// Wichtig · Fallstricke
- 1-basiert: Anders als bei
Date.prototype.getMonth()(0–11) beginnt die Zählung bei 1. Wer Code vonDateauf Temporal umstellt, darf deshalb kein+ 1mehr anhängen. - Kalenderabhängig: In nicht-ISO-Kalendern ist
monthnur ein Index und nicht jedes Jahr derselbe Monat. Zum Speichern oder Vergleichen von Monaten über Jahre hinweg istmonthCodedie bessere Wahl. - Nur lesbar: Eine Zuweisung wie
datum.month = 5hat keine Wirkung, im Strict Mode wirft sie einenTypeError. Stattdessenwith()verwenden. - Bei
with({ month })sollte man auf die Optionoverflowachten: Die Voreinstellung"constrain"kürzt ungültige Tage stillschweigend. - Kompatibilität: Temporal ist neu und noch nicht in allen Browsern und Node.js-Versionen verfügbar. Für den Einsatz im Produktivbetrieb bei Bedarf einen Polyfill wie
@js-temporal/polyfillodertemporal-polyfillverwenden.