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

Temporal.PlainDate.prototype.monthCode

Eigenschaft

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

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

Signatur

get Temporal.PlainDate.prototype.monthCode

Beschreibung

Die Zugriffseigenschaft monthCode gibt den Monat eines Temporal.PlainDate als String zurück. Das Format ist "M", gefolgt von einer zweistelligen Monatsnummer ("M01" bis "M12", in manchen Kalendern auch "M13"). Bei Schaltmonaten kommt ein "L" dazu, z. B. "M05L" für Adar I im hebräischen Kalender.

Anders als month, das nur die fortlaufende Position im Jahr angibt (1-basiert), bleibt monthCode über Jahre hinweg gleich. Im hebräischen Kalender ist Adar in einem Gemeinjahr Monat 6, in einem Schaltjahr aber Monat 7 (Adar II). Der monthCode ist in beiden Fällen "M06". Deshalb eignet sich monthCode für wiederkehrende Ereignisse wie Geburtstage oder Feiertage, für das Vergleichen von Monaten über Jahre hinweg und zum Serialisieren.

Im ISO-8601-Kalender ("iso8601") und im gregorianischen Kalender gibt es keine Schaltmonate. Dort entspricht monthCode einfach "M" plus der zweistelligen month-Zahl. Die Eigenschaft kann nur gelesen werden. Ein geändertes Datum erzeugst du mit with({ monthCode }) oder Temporal.PlainDate.from({ …, monthCode }).

Rückgabewert

Typ
string
Beschreibung
Kalenderabhängiger Monatscode im Format "M" + zweistellige Zahl, bei Schaltmonaten mit angehängtem "L" (z. B. "M01", "M12", "M05L").

Beispiele

Monatscode im ISO-Kalender

const datum = Temporal.PlainDate.from("2024-03-15");

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

month und monthCode im hebräischen Kalender

// 15. März 2024 fällt ins hebräische Schaltjahr 5784 (Adar II)
const hebr = Temporal.PlainDate.from("2024-03-15").withCalendar("hebrew");

console.log(hebr.year, hebr.month, hebr.monthCode, hebr.day);

// Adar I ist der Schaltmonat
const adar1 = Temporal.PlainDate.from({ calendar: "hebrew", year: 5784, monthCode: "M05L", day: 1 });
console.log(adar1.month, adar1.monthCode);
5784 7 "M06" 5 6 "M05L"

Wiederkehrendes Datum über monthCode statt month

// Jahrestag im hebräischen Kalender für ein anderes Jahr bestimmen
const ereignis = Temporal.PlainDate.from("2024-03-15").withCalendar("hebrew");

const jahrestag = (datum, jahr) =>
  Temporal.PlainDate.from({
    calendar: datum.calendarId,
    year: jahr,
    monthCode: datum.monthCode, // bleibt über Jahre stabil
    day: datum.day,
  });

const naechstes = jahrestag(ereignis, 5785); // 5785 ist kein Schaltjahr
console.log(naechstes.month, naechstes.monthCode);
console.log(naechstes.withCalendar("iso8601").toString());
6 "M06" 2025-03-05

Monat mit with() gezielt setzen

const d = Temporal.PlainDate.from("2024-01-31");

// Standard: overflow "constrain" kürzt auf den letzten gültigen Tag
console.log(d.with({ monthCode: "M02" }).toString());

try {
  d.with({ monthCode: "M02" }, { overflow: "reject" });
} catch (e) {
  console.log(e.constructor.name);
}
2024-02-29 RangeError

// Wichtig · Fallstricke

  • Nicht mit month verwechseln: month ist die Position im Jahr und verschiebt sich in Kalendern mit Schaltmonaten (hebräisch, chinesisch, dangi). Für Vergleiche und Speicherung über Jahre hinweg nimmst du monthCode.
  • Die Eigenschaft ist nur lesbar. Eine Zuweisung wie datum.monthCode = "M04" ändert nichts und wirft im Strict Mode einen TypeError. Temporal.PlainDate ist unveränderlich (immutable).
  • Übergibst du month und monthCode gleichzeitig an from() oder with(), müssen beide zusammenpassen, sonst gibt es einen RangeError.
  • Einen Schaltmonat-Code (z. B. "M05L") in einem Jahr ohne diesen Schaltmonat behandelt Temporal je nach Kalender. Mit overflow: "constrain" (Standard) wird auf einen passenden Monat ausgewichen. Mit "reject" wird ein RangeError geworfen.
  • Ungültige Formate wie "3", "M3" oder "m03" lösen einen RangeError bzw. TypeError aus.
  • Kompatibilität: Temporal gibt es bisher nur in neueren Browsern (u. a. Firefox 139+, Chrome 144+). Safari und ältere Node.js-Versionen brauchen einen Polyfill, z. B. @js-temporal/polyfill oder temporal-polyfill. Nicht-ISO-Kalender setzen außerdem Intl-Unterstützung voraus.