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

Temporal.ZonedDateTime.prototype.month

Eigenschaft

Liefert den 1-basierten Index des Monats im Jahr als positive ganze Zahl, bezogen auf Kalender und Zeitzone des <code>Temporal.ZonedDateTime</code>.

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

Signatur

get Temporal.ZonedDateTime.prototype.month

Beschreibung

Die Zugriffseigenschaft month gibt die Position des Monats innerhalb des Jahres zurück. Die Zählung beginnt bei 1. Anders als bei Date.prototype.getMonth() steht Januar also für 1 und nicht für 0. Der Wert gilt für die lokale Wanduhrzeit in der Zeitzone des Objekts. Derselbe Zeitpunkt (Temporal.Instant) kann deshalb je nach Zeitzone in verschiedene Monate fallen.

Der Wert hängt vom Kalender des Objekts ab. Im ISO-8601-Kalender (iso8601) liegt er immer zwischen 1 und 12. In Lunisolarkalendern wie dem hebräischen oder dem chinesischen Kalender kann ein Jahr 13 Monate haben. Ein Schaltmonat verschiebt dann die Nummer aller folgenden Monate. Eine Zahl wie month ist daher nur innerhalb desselben Jahres eindeutig. Wenn Sie einen Monat über mehrere Jahre hinweg eindeutig benennen wollen (zum Beispiel für Geburtstage oder Feiertage), verwenden Sie monthCode.

month kann nur gelesen werden. Temporal-Objekte sind unveränderlich. Um einen anderen Monat einzustellen, rufen Sie with({ month }) auf. Für Rechnungen wie „drei Monate später“ ist add({ months: 3 }) gedacht. Beide Methoden geben ein neues Objekt zurück.

Rückgabewert

Typ
number
Beschreibung
Positive ganze Zahl ab 1. Im ISO-Kalender liegt sie zwischen 1 und 12, in Kalendern mit Schaltmonaten reicht sie bis monthsInYear (z. B. 13).

Beispiele

Monat auslesen und Quartal berechnen

const termin = Temporal.ZonedDateTime.from('2024-08-15T10:30:00[Europe/Berlin]');

console.log(termin.month);

// Quartal aus dem 1-basierten Monat ableiten
const quartal = Math.ceil(termin.month / 3);
console.log(`Q${quartal}/${termin.year}`);
8 Q3/2024

Die Zeitzone bestimmt den Monat

// Ein Zeitpunkt: 31. Januar, 23:30 Uhr UTC
const instant = Temporal.Instant.from('2024-01-31T23:30:00Z');

const utc = instant.toZonedDateTimeISO('UTC');
const berlin = instant.toZonedDateTimeISO('Europe/Berlin');

console.log(utc.month);    // in UTC noch Januar
console.log(berlin.month); // in Berlin schon 00:30 Uhr am 1. Februar
1 2

Monat im hebräischen Kalender: month und monthCode

const zdt = Temporal.ZonedDateTime.from('2024-03-15T12:00:00[Asia/Jerusalem][u-ca=hebrew]');

// 5784 ist ein Schaltjahr mit Adar I und Adar II
console.log(zdt.month);        // Position im Jahr
console.log(zdt.monthCode);    // über mehrere Jahre stabile Kennung
console.log(zdt.monthsInYear);
7 M06 13

Anderen Monat einstellen mit with()

const start = Temporal.ZonedDateTime.from('2024-01-31T09:00:00[Europe/Berlin]');

// month ist schreibgeschützt: start.month = 2 hat keine Wirkung
const februar = start.with({ month: 2 }); // Standard: overflow 'constrain'
console.log(februar.toString());
console.log(februar.month, februar.day);

// Mit overflow 'reject' wird ein ungültiges Datum zum Fehler
try {
  start.with({ month: 2 }, { overflow: 'reject' });
} catch (e) {
  console.log(e.name);
}
2024-02-29T09:00:00+01:00[Europe/Berlin] 2 29 RangeError

// Wichtig · Fallstricke

  • Zählung ab 1: Anders als bei Date.prototype.getMonth() (0–11) steht Januar hier für 1. Wer alten Code umstellt, sollte darauf achten, dass kein + 1 oder - 1 doppelt oder gar nicht angewendet wird.
  • Kalender beachten: In Kalendern mit Schaltmonaten (hebrew, chinese, dangi) trägt derselbe Monat je nach Jahr eine andere Nummer. Für Vergleiche über Jahre hinweg verwenden Sie monthCode.
  • Nur lesbar: Eine Zuweisung an month ändert nichts; im Strict Mode wirft sie einen TypeError. Einen neuen Wert erhalten Sie über with() oder add().
  • Zeitzone: Der Monat bezieht sich auf die lokale Zeit. Um Mitternacht am Monatsende kann ein Wechsel der Zeitzone (withTimeZone()) auch den Monat ändern.
  • Kompatibilität: Temporal ist erst seit Kurzem in Browsern verfügbar (Firefox 139+, Chromium 144+). Safari und ältere Node.js-Versionen unterstützen es noch nicht. Dort brauchen Sie ein Polyfill, z. B. @js-temporal/polyfill oder temporal-polyfill.