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

Temporal.PlainDateTime.prototype.monthCode

Eigenschaft

Gibt einen kalenderspezifischen String wie <code>"M01"</code> oder <code>"M05L"</code> zurück, der den Monat des Datums eindeutig und unabhängig vom Jahr kennzeichnet.

seit JavaScript Temporal (TC39 Stage 3) – Firefox 139+, Chrome 144 Kategorie: method-property

Signatur

get Temporal.PlainDateTime.prototype.monthCode

Beschreibung

Die Accessor-Eigenschaft monthCode liefert den Monat eines Temporal.PlainDateTime als String im Format "M" + zweistellige Monatsnummer, z. B. "M01" für Januar. In Kalendern mit Schaltmonaten (etwa dem hebräischen oder chinesischen Kalender) hängt am Ende ein "L" an, z. B. "M05L" für den Schaltmonat Adar I.

Der Unterschied zu month: month ist ein fortlaufender Index (1, 2, 3, …) innerhalb des jeweiligen Jahres. In Jahren mit Schaltmonat verschiebt sich dieser Index. monthCode dagegen bezeichnet einen Monat über Jahre hinweg gleich. Deshalb ist es die richtige Wahl für jährlich wiederkehrende Ereignisse wie Geburtstage, Feiertage oder Jahrestage.

Im ISO-8601-Kalender (Standard) und im gregorianischen Kalender entspricht monthCode immer "M" + month mit zwei Stellen. Die Eigenschaft ist schreibgeschützt. Für ein geändertes Datum nutzt man with({ monthCode }).

Rückgabewert

Typ
string
Beschreibung
Kalenderspezifischer Monatscode, z. B. "M03" oder "M05L" für einen Schaltmonat.

Beispiele

Monatscode im ISO-Kalender auslesen

const dt = Temporal.PlainDateTime.from("2024-03-15T10:30:00");
console.log(dt.month);     // 3
console.log(dt.monthCode); // "M03"
3 "M03"

Schaltmonat im hebräischen Kalender

// 2024 ist im hebräischen Kalender ein Schaltjahr (5784)
const dt = Temporal.PlainDateTime.from("2024-03-01T12:00:00").withCalendar("hebrew");
console.log(dt.month);     // 6 (fortlaufender Index)
console.log(dt.monthCode); // "M05L" (Adar I, Schaltmonat)
6 "M05L"

Jährliches Ereignis mit monthCode übertragen

// Termin im gleichen Kalendermonat im Folgejahr – robust auch bei Schaltmonaten
const termin = Temporal.PlainDateTime.from("2024-06-20T09:00:00");
const naechstesJahr = termin.with({ year: termin.year + 1, monthCode: termin.monthCode });
console.log(naechstesJahr.toString());
2025-06-20T09:00:00

Nach Monat filtern

const termine = [
  "2024-01-10T08:00", "2024-05-02T14:00", "2025-01-22T09:30"
].map((s) => Temporal.PlainDateTime.from(s));

const januar = termine.filter((t) => t.monthCode === "M01");
console.log(januar.map(String));
["2024-01-10T08:00:00", "2025-01-22T09:30:00"]

// Wichtig · Fallstricke

  • Nicht mit month gleichsetzen: In Kalendern mit Schaltmonaten kann derselbe month-Index in verschiedenen Jahren für unterschiedliche Monate stehen. Für Vergleiche über Jahresgrenzen hinweg immer monthCode verwenden.
  • Gibt man in with() oder from() sowohl month als auch monthCode an, müssen beide zusammenpassen. Sonst wird ein RangeError geworfen.
  • Ein Schaltmonats-Code wie \"M05L\" in einem Nicht-Schaltjahr wird mit overflow: \"constrain\" (Standard) auf einen benachbarten Monat angepasst. Mit overflow: \"reject\" gibt es einen RangeError.
  • Nur lesbar: Eine Zuweisung an dt.monthCode hat keine Wirkung und wirft im Strict Mode einen TypeError.
  • Kompatibilität: Temporal ist noch nicht in allen Browsern verfügbar (u. a. fehlt Safari-Unterstützung). Für den Produktiveinsatz einen Polyfill wie @js-temporal/polyfill oder temporal-polyfill verwenden.