Start · Sprachen · JavaScript · Referenz · Temporal.PlainDate.prototype.toPlainMonthDay()

Temporal.PlainDate.prototype.toPlainMonthDay()

Methode

Gibt ein neues <code>Temporal.PlainMonthDay</code> zurück, das <code>monthCode</code> und <code>day</code> dieses Datums im gleichen Kalendersystem enthält – ohne Jahr.

seit JavaScript ES2026 (Temporal, Stage 4); Firefox 139+, Chrome 1 Kategorie: method-property

Signatur

Temporal.PlainDate.prototype.toPlainMonthDay()

Beschreibung

Die Methode toPlainMonthDay() entfernt die Jahresangabe aus einem Temporal.PlainDate und liefert ein Temporal.PlainMonthDay. Übrig bleiben nur monthCode (z. B. "M03") und day. Das Kalendersystem des Ausgangsdatums wird übernommen.

Das ist praktisch für jährlich wiederkehrende Termine wie Geburtstage, Jahrestage oder feste Feiertage. Ein PlainMonthDay lässt sich speichern und vergleichen. Mit toPlainDate({ year }) machst du daraus später wieder ein konkretes Datum in einem beliebigen Jahr.

Die Methode nimmt keine Argumente und ändert das Original nicht, denn alle Temporal-Objekte sind unveränderlich. Beachte: Es wird der monthCode gespeichert, nicht die Monatsnummer. Das ist wichtig bei Kalendern mit Schaltmonaten, etwa dem hebräischen oder dem chinesischen Kalender.

Rückgabewert

Typ
Temporal.PlainMonthDay
Beschreibung
Ein neues Temporal.PlainMonthDay mit monthCode und day des Datums im gleichen Kalender. Im ISO-Kalender ist das interne Referenzjahr immer 1972.

Beispiele

Monat und Tag aus einem Datum lösen

const datum = Temporal.PlainDate.from("2024-07-15");
const md = datum.toPlainMonthDay();

console.log(md.toString());
console.log(md.monthCode, md.day);
07-15 M07 15

Nächsten Geburtstag berechnen

const geburtsdatum = Temporal.PlainDate.from("1990-11-03");
const geburtstag = geburtsdatum.toPlainMonthDay();

const heute = Temporal.Now.plainDateISO();
let naechster = geburtstag.toPlainDate({ year: heute.year });
if (Temporal.PlainDate.compare(naechster, heute) < 0) {
  naechster = geburtstag.toPlainDate({ year: heute.year + 1 });
}

const tage = heute.until(naechster).days;
console.log(`Nächster Geburtstag: ${naechster} (in ${tage} Tagen)`);
Nächster Geburtstag: 2025-11-03 (in 42 Tagen) // abhängig vom heutigen Datum

Jahrestag prüfen und 29. Februar

const hochzeit = Temporal.PlainDate.from("2016-02-29").toPlainMonthDay();
const heute = Temporal.PlainDate.from("2025-02-28");

// Vergleich über equals() – ohne Jahr
console.log(heute.toPlainMonthDay().equals(hochzeit));

// Im Nicht-Schaltjahr wird der Tag standardmäßig angepasst
console.log(hochzeit.toPlainDate({ year: 2025 }).toString());
false 2025-02-28

Kalendersystem wird übernommen

const d = Temporal.PlainDate.from("2024-03-11").withCalendar("hebrew");
const md = d.toPlainMonthDay();

console.log(md.calendarId, md.monthCode, md.day);
hebrew M06 1

// Wichtig · Fallstricke

  • Browser-Unterstützung: Temporal ist neu. Firefox unterstützt es ab Version 139, Chrome ab 144. In älteren Umgebungen und in Safari brauchst du einen Polyfill, z. B. @js-temporal/polyfill oder temporal-polyfill. Node.js unterstützt Temporal erst in aktuellen Versionen.
  • Kein Jahr: Du kannst ein PlainMonthDay nicht direkt mit compare() sortieren, weil ohne Jahr keine eindeutige Reihenfolge feststeht. Es gibt nur equals(). Zum Sortieren wandelst du die Werte mit toPlainDate({ year }) um.
  • 29. Februar: toPlainDate() passt ungültige Tage standardmäßig an (overflow: "constrain"). Aus dem 29. Februar wird in Nicht-Schaltjahren der 28. Februar.
  • monthCode statt month: In Kalendern mit Schaltmonaten kann dieselbe Monatsnummer je nach Jahr für einen anderen Monat stehen. PlainMonthDay speichert deshalb den stabilen monthCode.
  • Referenzjahr: Die Eigenschaft year gibt es nicht. Das interne Referenzjahr (ISO: 1972) taucht nur in toString() mit Nicht-ISO-Kalendern auf und hat inhaltlich keine Bedeutung.