Signatur
Beschreibung
Die Zugriffs-Eigenschaft month liefert die Position des Monats innerhalb seines Jahres, beginnend bei 1. Im ISO-8601-Kalender entspricht das den bekannten Werten von 1 (Januar) bis 12 (Dezember). Anders als beim alten Date-Objekt, bei dem getMonth() nullbasiert zählt, gibt es hier keine Umrechnung mit + 1.
Der Wert hängt vom Kalender der Instanz ab. In Kalendern mit Schaltmonaten (z. B. hebrew oder chinese) verschiebt sich die Nummerierung in Schaltjahren: Derselbe benannte Monat kann in verschiedenen Jahren einen anderen month-Index haben. Für eine jahresübergreifend stabile Kennung eines Monats ist daher monthCode (z. B. "M05L") die richtige Wahl; month eignet sich vor allem zum Zählen, Sortieren und Iterieren innerhalb eines Jahres (Bereich 1 bis monthsInYear).
Die Eigenschaft ist schreibgeschützt – Temporal.PlainYearMonth-Objekte sind unveränderlich. Um einen anderen Monat zu erhalten, erzeugt man mit with(), add() oder subtract() eine neue Instanz.
Rückgabewert
1 bis monthsInYear (im ISO-Kalender 1–12), die den Monatsindex im Jahr angibt.Beispiele
Monat eines Jahres-Monats auslesen
const abrechnung = Temporal.PlainYearMonth.from("2024-03");
console.log(abrechnung.year); // Jahr
console.log(abrechnung.month); // 1-basiert, kein +1 nötig
Monat ändern mit with() und add()
const start = Temporal.PlainYearMonth.from("2024-11");
// Neue Instanz mit anderem Monat – das Original bleibt unverändert
const dezember = start.with({ month: 12 });
const naechster = dezember.add({ months: 1 });
console.log(start.month, dezember.month, naechster.month, naechster.year);
Alle Monate eines Jahres durchlaufen
const jahr = Temporal.PlainYearMonth.from("2025-01");
const labels = [];
for (let m = 1; m <= jahr.monthsInYear; m++) {
const ym = jahr.with({ month: m });
labels.push(`${ym.year}-${String(ym.month).padStart(2, "0")}: ${ym.daysInMonth} Tage`);
}
console.log(labels.slice(0, 3).join("\n"));
month vs. monthCode im hebräischen Kalender
// 5784 ist ein hebräisches Schaltjahr mit Adar I (M05L)
const adar1 = Temporal.PlainYearMonth.from({ year: 5784, monthCode: "M05L", calendar: "hebrew" });
const adar = Temporal.PlainYearMonth.from({ year: 5784, monthCode: "M06", calendar: "hebrew" });
console.log(adar1.month, adar1.monthCode);
console.log(adar.month, adar.monthCode);
// Wichtig · Fallstricke
- 1-basiert: Im Gegensatz zu
Date.prototype.getMonth()(0–11) beginntmonthbei1. Beim Portieren alten Codes das+ 1/- 1entfernen. - Kalenderabhängig: In Kalendern mit Schaltmonaten ist
monthkein stabiler Bezeichner. Zum Speichern oder Vergleichen „desselben“ Monats über Jahre hinwegmonthCodeverwenden. - Nur lesbar: Eine Zuweisung wie
ym.month = 5hat keine Wirkung (im Strict ModeTypeError). Stattdessenym.with({ month: 5 })nutzen. - Keine Monatsnamen: Für lokalisierte Namen
toLocaleString()bzw.Intl.DateTimeFormatverwenden – der Kalender der Instanz muss dabei zum Kalender der Locale passen, sonst wird einRangeErrorgeworfen. - Kompatibilität: Temporal ist erst in neueren Browsern verfügbar (Firefox 139+, Chrome/Edge 144+); Safari und ältere Node.js-Versionen benötigen einen Polyfill wie
@js-temporal/polyfillodertemporal-polyfill.