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

Temporal.PlainDate.prototype.month

Eigenschaft

Liefert den 1-basierten Monatsindex (<code>1</code> bis <code>monthsInYear</code>) eines <code>Temporal.PlainDate</code> im jeweiligen Kalender.

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

Signatur

get Temporal.PlainDate.prototype.month

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

Typ
number
Beschreibung
Ganzzahl von 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);
3 "M03"

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);
}
"2024-02-29" RangeError

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)`);
}
1: Januar (31 Tage) 2: Februar (28 Tage) ... 12: Dezember (31 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);
13 7 "M06"

// Wichtig · Fallstricke

  • 1-basiert: Anders als bei Date.prototype.getMonth() (0–11) beginnt die Zählung bei 1. Wer Code von Date auf Temporal umstellt, darf deshalb kein + 1 mehr anhängen.
  • Kalenderabhängig: In nicht-ISO-Kalendern ist month nur ein Index und nicht jedes Jahr derselbe Monat. Zum Speichern oder Vergleichen von Monaten über Jahre hinweg ist monthCode die bessere Wahl.
  • Nur lesbar: Eine Zuweisung wie datum.month = 5 hat keine Wirkung, im Strict Mode wirft sie einen TypeError. Stattdessen with() verwenden.
  • Bei with({ month }) sollte man auf die Option overflow achten: 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/polyfill oder temporal-polyfill verwenden.