Signatur
Beschreibung
Die Methode toPlainDate() wandelt einen Jahr-Monat-Wert (z. B. „Februar 2024“) in ein vollständiges Kalenderdatum um. Den fehlenden Tag gibst du über ein Objekt mit der Eigenschaft day an. Das Ergebnis ist ein neues Temporal.PlainDate. Es hat denselben Kalender wie das Ausgangsobjekt. Das ursprüngliche PlainYearMonth bleibt unverändert, denn alle Temporal-Objekte sind unveränderlich.
Das ist praktisch, wenn deine Daten nur Monatsangaben enthalten, etwa Abrechnungszeiträume, Ablaufdaten von Kreditkarten („12/27“) oder Monatsberichte. Für konkrete Berechnungen wie Fälligkeitstermine, den ersten oder letzten Tag des Monats oder Wochentage brauchst du aber ein vollständiges Datum.
Ist der Tag zu groß, wird er immer begrenzt (Verhalten wie overflow: "constrain"). Du kannst keine Option übergeben, die stattdessen einen Fehler auslöst. { day: 31 } ergibt im Februar 2024 also den 29. Februar. Möchtest du ungültige Tage ablehnen, prüfe vorher selbst gegen daysInMonth.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $dayInfo Pflicht | { day: number } | Objekt mit der Eigenschaft day: Tag im Monat als positive Ganzzahl im Kalendersystem des Objekts. Weitere Eigenschaften wie year oder month werden ignoriert. |
Rückgabewert
Temporal.PlainDate mit Jahr und Monat dieses Objekts und dem angegebenen Tag (bei Bedarf auf den letzten gültigen Tag begrenzt), im selben Kalender.Beispiele
Einfacher Fall: Tag ergänzen
const ym = Temporal.PlainYearMonth.from("2024-02");
const datum = ym.toPlainDate({ day: 15 });
console.log(datum.toString());
console.log(datum.dayOfWeek); // 1 = Montag … 7 = Sonntag
console.log(ym.toString()); // Original bleibt unverändert
Erster und letzter Tag eines Monats
const monatsgrenzen = (ym) => ({
start: ym.toPlainDate({ day: 1 }),
ende: ym.toPlainDate({ day: ym.daysInMonth })
});
const { start, ende } = monatsgrenzen(Temporal.PlainYearMonth.from("2025-04"));
console.log(`${start} bis ${ende}`);
Zu große Tage werden begrenzt – Fälligkeitstermin am 31.
const faelligkeit = (ym) => ym.toPlainDate({ day: 31 });
for (const s of ["2024-01", "2024-02", "2023-02", "2024-04"]) {
console.log(faelligkeit(Temporal.PlainYearMonth.from(s)).toString());
}
Kreditkarten-Ablauf: letzter gültiger Tag prüfen
const istAbgelaufen = (ablauf, heute = Temporal.Now.plainDateISO()) => {
const ym = Temporal.PlainYearMonth.from(ablauf);
const letzterTag = ym.toPlainDate({ day: ym.daysInMonth });
return Temporal.PlainDate.compare(heute, letzterTag) > 0;
};
console.log(istAbgelaufen("2027-12", Temporal.PlainDate.from("2026-05-10")));
console.log(istAbgelaufen("2025-03", Temporal.PlainDate.from("2026-05-10")));
// Wichtig · Fallstricke
- Kein Überlauf-Fehler: Zu große Tage werden immer stillschweigend begrenzt. Ein Parameter
overflow: "reject"ist hier nicht vorgesehen. Prüfe den Wert bei Bedarf selbst mitday <= ym.daysInMonth. - Objekt statt Zahl:
ym.toPlainDate(15)löst einenTypeErroraus. Fehltdayim Objekt, gibt es ebenfalls einenTypeError. Werte wie0oder negative Tage lösen einenRangeErroraus. - Kalendersysteme:
daywird im Kalender des Objekts gedeutet, nicht zwingend im ISO-Kalender. Das Ergebnis hat dieselbecalendarId. Der Referenztag, den einPlainYearMonthintern speichert, wird dabei nicht verwendet. - Browser-Unterstützung: Die Temporal-API ist noch nicht überall verfügbar (Firefox ab 139, Chromium ab 144, Safari noch nicht standardmäßig). Für Produktivcode brauchst du bei Bedarf einen Polyfill, z. B.
@js-temporal/polyfillodertemporal-polyfill.