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

Temporal.PlainYearMonth.prototype.toPlainDate()

Methode

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

seit JavaScript Temporal (TC39-Proposal, Stage 3) – Firefox 139+, Kategorie: method-property

Signatur

Temporal.PlainYearMonth.prototype.toPlainDate(dayInfo)

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

Typ
Temporal.PlainDate
Beschreibung
Ein neues 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
2024-02-15 4 2024-02

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}`);
2025-04-01 bis 2025-04-30

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());
}
2024-01-31 2024-02-29 2023-02-28 2024-04-30

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")));
false true

// 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 mit day <= ym.daysInMonth.
  • Objekt statt Zahl: ym.toPlainDate(15) löst einen TypeError aus. Fehlt day im Objekt, gibt es ebenfalls einen TypeError. Werte wie 0 oder negative Tage lösen einen RangeError aus.
  • Kalendersysteme: day wird im Kalender des Objekts gedeutet, nicht zwingend im ISO-Kalender. Das Ergebnis hat dieselbe calendarId. Der Referenztag, den ein PlainYearMonth intern 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/polyfill oder temporal-polyfill.