Start · Sprachen · JavaScript · Referenz · Temporal.PlainMonthDay.prototype.toPlainDate()

Temporal.PlainMonthDay.prototype.toPlainDate()

Methode

Ergänzt einen <code>Temporal.PlainMonthDay</code> um ein Jahr und gibt ein neues <code>Temporal.PlainDate</code> im selben Kalendersystem zurück.

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

Signatur

Temporal.PlainMonthDay.prototype.toPlainDate(yearInfo)

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

Typ
Temporal.PlainDate
Beschreibung
Ein neues 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" }));
2025-07-14 Montag

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
2024-02-29 2025-02-28

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")}`);
Noch … Tage bis zum 3.10.… (abhängig vom heutigen Datum)

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" }));
}
2024 Dienstag 2025 Mittwoch 2026 Donnerstag

// 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.day mit dem ursprünglichen monthDay.day.
  • Argument muss ein Objekt sein: toPlainDate(2025) wirft einen TypeError. Richtig ist toPlainDate({ year: 2025 }). Auch ein Objekt ohne year (bzw. ohne era/eraYear) führt zu einem TypeError.
  • Kalendersystem: Das Jahr wird im Kalender des PlainMonthDay gedeutet. Bei nicht-gregorianischen Kalendern (z. B. hebrew) ist year also 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/polyfill oder temporal-polyfill.