Start · Sprachen · JavaScript · Referenz · Temporal.PlainMonthDay.prototype.monthCode

Temporal.PlainMonthDay.prototype.monthCode

Eigenschaft

Liefert einen kalenderabhängigen String wie <code>"M03"</code> oder <code>"M05L"</code>, der den Monat eines <code>Temporal.PlainMonthDay</code> eindeutig bezeichnet.

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

Signatur

get Temporal.PlainMonthDay.prototype.monthCode

Beschreibung

Die Zugriffseigenschaft monthCode gibt den Monat eines Temporal.PlainMonthDay als Monatscode zurück. Der Code hat die Form "M" + zweistellige Monatsnummer, also etwa "M01" bis "M12" im ISO-8601-Kalender. In Lunisolarkalendern wie dem chinesischen oder dem hebräischen Kalender werden Schaltmonate mit angehängtem "L" gekennzeichnet, z. B. "M05L" für den hebräischen Adar I.

Anders als Temporal.PlainDate hat PlainMonthDay keine Eigenschaft month. Das liegt daran, dass eine Monatsnummer ohne Jahresangabe in manchen Kalendern nicht eindeutig ist: Ob ein Monat der 6. oder 7. des Jahres ist, hängt davon ab, ob es ein Schaltjahr mit Schaltmonat gibt. Der monthCode dagegen bezeichnet den Monat immer gleich, egal in welchem Jahr.

Die Eigenschaft eignet sich gut für jährlich wiederkehrende Termine wie Geburtstage, Feiertage oder Jahrestage. Man kann damit zwei Monat-Tag-Werte vergleichen, den Monat eines PlainMonthDay gezielt über with({ monthCode }) ändern oder Werte gruppieren und sortieren.

Die Eigenschaft kann nur gelesen werden. Ihr Setter ist undefined. Um den Monat zu ändern, erzeugt man mit with() ein neues Objekt, denn Temporal-Objekte sind unveränderlich.

Rückgabewert

Typ
string
Beschreibung
Kalenderabhängiger Monatscode, z. B. "M01" bis "M12" im ISO-Kalender oder "M05L" für einen Schaltmonat in Lunisolarkalendern.

Beispiele

Monatscode eines ISO-Monat-Tag-Werts lesen

const heiligabend = Temporal.PlainMonthDay.from("12-24");
console.log(heiligabend.monthCode);
console.log(heiligabend.day);

// Es gibt keine month-Eigenschaft
console.log(heiligabend.month);
M12 24 undefined

Monat über with() ändern

const termin = Temporal.PlainMonthDay.from({ month: 3, day: 15 });
console.log(termin.monthCode);

// Neues Objekt erzeugen – das Original bleibt unverändert
const verschoben = termin.with({ monthCode: "M04" });
console.log(verschoben.toString());
console.log(termin.toString());
M03 04-15 03-15

Prüfen, ob heute Geburtstag ist

const geburtstag = Temporal.PlainMonthDay.from("07-09");
const heute = Temporal.Now.plainDateISO();

const istGeburtstag =
  heute.monthCode === geburtstag.monthCode && heute.day === geburtstag.day;

console.log(istGeburtstag ? "Alles Gute!" : "Heute nicht.");

// Einfacher: equals() vergleicht Monatscode, Tag und Kalender
console.log(heute.toPlainMonthDay().equals(geburtstag));
Heute nicht. false

Schaltmonat im hebräischen Kalender

const datum = Temporal.PlainDate.from({
  year: 5784,
  monthCode: "M05L", // Adar I (Schaltmonat)
  day: 10,
  calendar: "hebrew"
});

const md = datum.toPlainMonthDay();
console.log(md.monthCode);
console.log(datum.month); // Ordnungsnummer im konkreten Jahr
M05L 6

// Wichtig · Fallstricke

  • Kein month: PlainMonthDay hat keine Eigenschaft month. Ein Zugriff darauf liefert undefined. Nutze stattdessen monthCode.
  • Nicht nach Zahl vergleichen: Der Monatscode ist ein String. Im ISO-Kalender lässt er sich dank führender Null zwar lexikografisch sortieren, in Lunisolarkalendern mit Schaltmonaten wie "M05L" ergibt das aber keine sinnvolle Reihenfolge.
  • Nur lesbar: Eine Zuweisung wie md.monthCode = "M02" hat keine Wirkung. Im strikten Modus wirft sie einen TypeError. Verwende with().
  • Ungültige Codes: with({ monthCode: "M13" }) oder ein falsch geformter Code löst einen RangeError aus. Dasselbe gilt für einen Schaltmonat in einem Kalender, der keinen solchen kennt.
  • Kompatibilität: Temporal ist neu und wird noch nicht von allen Browsern und Node.js-Versionen unterstützt. Für ältere Umgebungen gibt es einen Polyfill, z. B. @js-temporal/polyfill oder temporal-polyfill.