Signatur
Beschreibung
Ein Temporal.PlainMonthDay steht für einen wiederkehrenden Kalendertag ohne Jahr, etwa einen Geburtstag, Jahrestag oder Feiertag wie den 24. Dezember. Mit toPlainDate() legst du diesen Tag auf ein bestimmtes Jahr fest. Du bekommst dann ein vollständiges Temporal.PlainDate, mit dem du rechnen kannst, etwa um den Wochentag oder den Abstand zu heute zu bestimmen oder das Datum zu vergleichen.
Das Jahr übergibst du als Objekt, z. B. { year: 2025 }. Bei Kalendern mit Epochen (Ären) kannst du stattdessen era und eraYear angeben. Das Ergebnis übernimmt das Kalendersystem des ursprünglichen PlainMonthDay. Das Originalobjekt bleibt unverändert, denn alle Temporal-Objekte sind unveränderlich.
Wichtig: Gibt es den Tag im gewählten Jahr nicht, wird er immer angepasst (overflow: "constrain"), und die Methode wirft keinen Fehler. Der 29. Februar wird in einem Jahr ohne Schalttag also zum 28. Februar. Eine Option, stattdessen einen Fehler auszulösen, gibt es hier nicht.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $yearInfo Pflicht | { year: number } | { era: string, eraYear: number } | Objekt mit dem Jahr, das ergänzt werden soll. Im ISO-Kalender reicht year. Bei Kalendern mit Epochen kannst du auch era zusammen mit eraYear angeben. Andere Eigenschaften werden ignoriert. |
Rückgabewert
Temporal.PlainDate mit Monat und Tag dieses PlainMonthDay und dem angegebenen Jahr, im selben Kalendersystem. Gibt es den Tag im Jahr nicht, wird er auf ein gültiges Datum angepasst.Beispiele
Geburtstag in einem bestimmten Jahr: Wochentag bestimmen
const geburtstag = Temporal.PlainMonthDay.from("07-14");
const datum = geburtstag.toPlainDate({ year: 2025 });
console.log(datum.toString());
console.log(datum.toLocaleString("de-DE", { weekday: "long" }));
29. Februar in einem Jahr ohne Schalttag
const schalttag = Temporal.PlainMonthDay.from("02-29");
console.log(schalttag.toPlainDate({ year: 2024 }).toString()); // Schaltjahr
console.log(schalttag.toPlainDate({ year: 2025 }).toString()); // wird angepasst
Tage bis zum nächsten Jahrestag berechnen
const jahrestag = Temporal.PlainMonthDay.from("10-03");
const heute = Temporal.Now.plainDateISO();
let naechster = jahrestag.toPlainDate({ year: heute.year });
// Schon vorbei? Dann das nächste Jahr nehmen
if (Temporal.PlainDate.compare(naechster, heute) < 0) {
naechster = jahrestag.toPlainDate({ year: heute.year + 1 });
}
const tage = heute.until(naechster).days;
console.log(`Noch ${tage} Tage bis zum ${naechster.toLocaleString("de-DE")}`);
Wochentage von Heiligabend über mehrere Jahre
const heiligabend = Temporal.PlainMonthDay.from({ month: 12, day: 24 });
for (const year of [2024, 2025, 2026]) {
const d = heiligabend.toPlainDate({ year });
console.log(year, d.toLocaleString("de-DE", { weekday: "long" }));
}
// Wichtig · Fallstricke
- Immer angepasst: Ungültige Daten (z. B. 29. Februar in einem Jahr ohne Schalttag) werden stillschweigend angepasst. Willst du den Fall selbst behandeln, vergleiche danach
result.daymit dem ursprünglichenmonthDay.day. - Argument muss ein Objekt sein:
toPlainDate(2025)wirft einenTypeError. Richtig isttoPlainDate({ year: 2025 }). Auch ein Objekt ohneyear(bzw. ohneera/eraYear) führt zu einemTypeError. - Kalendersystem: Das Jahr wird im Kalender des
PlainMonthDaygedeutet. Bei nicht-gregorianischen Kalendern (z. B.hebrew) istyearalso ein Jahr in diesem Kalender, kein ISO-Jahr. - Browser-Unterstützung: Temporal ist noch recht neu. Es ist nativ ab Firefox 139 und Chrome/Edge 144 verfügbar, Safari unterstützt es noch nicht. Für eine breite Unterstützung brauchst du einen Polyfill wie
@js-temporal/polyfillodertemporal-polyfill.