Signatur
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
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);
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)`);
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());
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);
// 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/polyfillodertemporal-polyfill. Node.js unterstützt Temporal erst in aktuellen Versionen. - Kein Jahr: Du kannst ein
PlainMonthDaynicht direkt mitcompare()sortieren, weil ohne Jahr keine eindeutige Reihenfolge feststeht. Es gibt nurequals(). Zum Sortieren wandelst du die Werte mittoPlainDate({ 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.
PlainMonthDayspeichert deshalb den stabilenmonthCode. - Referenzjahr: Die Eigenschaft
yeargibt es nicht. Das interne Referenzjahr (ISO: 1972) taucht nur intoString()mit Nicht-ISO-Kalendern auf und hat inhaltlich keine Bedeutung.