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

Temporal.PlainYearMonth.prototype.monthCode

Eigenschaft

Gibt einen kalenderabhängigen Monatscode wie <code>"M03"</code> oder <code>"M05L"</code> zurück, der den Monat eines <code>Temporal.PlainYearMonth</code> eindeutig bezeichnet.

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

Signatur

get Temporal.PlainYearMonth.prototype.monthCode

Beschreibung

Die Zugriffseigenschaft monthCode liefert den Monat eines Temporal.PlainYearMonth als String im Format "M" + zweistellige Nummer, z. B. "M01" bis "M12". In Kalendern mit Schaltmonaten (etwa dem hebräischen oder dem chinesischen Kalender) bekommen Schaltmonate zusätzlich das Suffix L („leap“), z. B. "M05L" für Adar I.

Der wichtige Unterschied zu month: month ist die fortlaufende Position des Monats im jeweiligen Jahr (1-basiert) und kann sich je nach Jahr verschieben, wenn es einen Schaltmonat gibt. monthCode bleibt dagegen für denselben Monat über alle Jahre hinweg stabil. Im ISO-8601-Kalender (Standard) entsprechen sich beide direkt: month === 3 heißt dann immer monthCode === "M03".

Setzen Sie monthCode ein, wenn Sie einen Monat kalenderübergreifend oder über mehrere Jahre hinweg eindeutig ansprechen wollen – etwa für wiederkehrende Ereignisse wie „jedes Jahr im Adar“ oder beim Speichern und Wiederherstellen von Nutzereingaben in nicht-gregorianischen Kalendern. Die Eigenschaft kann nur gelesen werden. Wenn Sie den Monat ändern wollen, erzeugen Sie mit with({ monthCode }) eine neue Instanz oder verwenden Temporal.PlainYearMonth.from({ year, monthCode, calendar }).

Rückgabewert

Typ
string
Beschreibung
Kalenderabhängiger Monatscode wie "M01"–"M12" (bzw. "M13" in Kalendern mit 13 Monaten) und optional mit Suffix L für Schaltmonate, z. B. "M05L".

Beispiele

Monatscode im ISO-Kalender auslesen

const ym = Temporal.PlainYearMonth.from("2024-03");

console.log(ym.monthCode); // stabiler Code
console.log(ym.month);     // Position im Jahr
M03 3

Schaltmonat im hebräischen Kalender

// 5784 ist ein hebräisches Schaltjahr mit Adar I (M05L) und Adar II (M06)
const adarI = Temporal.PlainYearMonth.from({
  year: 5784,
  monthCode: "M05L",
  calendar: "hebrew"
});

console.log(adarI.monthCode); // Schaltmonat
console.log(adarI.month);     // 6. Monat dieses Jahres
console.log(adarI.inLeapYear);
M05L 6 true

Warum monthCode statt month: gleicher Monat, andere Position

const adar5783 = Temporal.PlainYearMonth.from({ year: 5783, monthCode: "M06", calendar: "hebrew" });
const adar5784 = Temporal.PlainYearMonth.from({ year: 5784, monthCode: "M06", calendar: "hebrew" });

// Derselbe Monat (Adar bzw. Adar II) – aber unterschiedliche Position
console.log(adar5783.monthCode, adar5783.month);
console.log(adar5784.monthCode, adar5784.month);

// Wiederkehrende Ereignisse daher über monthCode vergleichen
const istAdar = (ym) => ym.monthCode === "M06";
console.log(istAdar(adar5783), istAdar(adar5784));
M06 6 M06 7 true true

Monat per with() über monthCode ändern

const start = Temporal.PlainYearMonth.from("2025-04");
const dezember = start.with({ monthCode: "M12" });

console.log(dezember.toString());
console.log(start.monthCode); // Original bleibt unverändert (immutable)
2025-12 M04

// Wichtig · Fallstricke

  • Nur lesbar: Da die Eigenschaft keinen Setter hat, wird ym.monthCode = "M05" im nicht-strikten Modus stillschweigend ignoriert und löst im Strict Mode (z. B. in ES-Modulen) einen TypeError aus. Verwenden Sie stattdessen with().
  • Nicht mit month verwechseln: In Kalendern mit Schaltmonaten ist month keine verlässliche Monatskennung. Für Speicherung, Vergleiche und wiederkehrende Termine eignet sich monthCode besser.
  • Widersprüche: Übergeben Sie month und monthCode gleichzeitig an from() oder with() und passen die Werte nicht zusammen, wird ein RangeError ausgelöst. Einen Schaltmonatscode in einem Nicht-Schaltjahr (z. B. "M05L" im Jahr 5783) behandelt overflow: "constrain" (Standard) durch Anpassen, mit overflow: "reject" gibt es einen RangeError.
  • Kompatibilität: Temporal ist neu und noch nicht Baseline. Unterstützt wird es in Firefox ab 139 und Chrome/Edge ab 144, Safari fehlt noch. Für ältere Umgebungen gibt es Polyfills wie @js-temporal/polyfill oder temporal-polyfill. Nicht-ISO-Kalender brauchen außerdem Intl-Daten.