Signatur
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
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}`);
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
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);
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);
}
// Wichtig · Fallstricke
- Zählung ab 1: Anders als bei
Date.prototype.getMonth()(0–11) steht Januar hier für1. Wer alten Code umstellt, sollte darauf achten, dass kein+ 1oder- 1doppelt 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 SiemonthCode. - Nur lesbar: Eine Zuweisung an
monthändert nichts; im Strict Mode wirft sie einenTypeError. Einen neuen Wert erhalten Sie überwith()oderadd(). - 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/polyfillodertemporal-polyfill.