Signatur
Beschreibung
Die Methode toPlainYearMonth() macht aus einem vollständigen Kalenderdatum (Temporal.PlainDate) eine Monatsangabe (Temporal.PlainYearMonth). Der Tag fällt weg, Jahr, Monat und Kalendersystem bleiben erhalten. Das ursprüngliche Objekt wird nicht verändert, denn alle Temporal-Objekte sind unveränderlich.
Das ist praktisch, wenn es nur um den Monat geht und nicht um den genauen Tag, zum Beispiel bei Monatsabrechnungen, Abo-Laufzeiten, Ablaufdaten von Kreditkarten oder beim Gruppieren von Buchungen nach Monat. Ein PlainYearMonth bietet dafür eigene Eigenschaften wie daysInMonth und monthsInYear sowie Rechenmethoden wie add(), subtract(), until() und since(), die immer in ganzen Monaten und Jahren rechnen.
Die Methode hat keine Parameter. Um wieder zu einem vollständigen Datum zu kommen, gibt man mit PlainYearMonth.prototype.toPlainDate({ day }) einen Tag an.
Rückgabewert
Temporal.PlainYearMonth mit dem Jahr und Monat dieses Datums im selben Kalendersystem (calendarId bleibt gleich).Beispiele
Datum in Jahr/Monat umwandeln
const date = Temporal.PlainDate.from("2024-07-18");
const ym = date.toPlainYearMonth();
console.log(ym.toString());
console.log(ym.year, ym.month);
console.log(ym.daysInMonth);
// Das Original bleibt unverändert
console.log(date.toString());
Buchungen nach Monat gruppieren
const buchungen = [
{ datum: "2024-01-05", betrag: 120 },
{ datum: "2024-01-28", betrag: 80 },
{ datum: "2024-02-03", betrag: 45 },
];
const proMonat = new Map();
for (const { datum, betrag } of buchungen) {
const key = Temporal.PlainDate.from(datum).toPlainYearMonth().toString();
proMonat.set(key, (proMonat.get(key) ?? 0) + betrag);
}
console.log([...proMonat]);
Erster und letzter Tag des Monats
const heute = Temporal.PlainDate.from("2024-02-14");
const monat = heute.toPlainYearMonth();
const erster = monat.toPlainDate({ day: 1 });
const letzter = monat.toPlainDate({ day: monat.daysInMonth });
const naechsterMonat = monat.add({ months: 1 });
console.log(erster.toString());
console.log(letzter.toString());
console.log(naechsterMonat.toString());
Prüfen, ob eine Karte abgelaufen ist
const ablauf = Temporal.PlainYearMonth.from("2024-05");
const heute = Temporal.PlainDate.from("2024-06-02");
const abgelaufen =
Temporal.PlainYearMonth.compare(heute.toPlainYearMonth(), ablauf) > 0;
console.log(abgelaufen ? "Karte abgelaufen" : "Karte gültig");
// Wichtig · Fallstricke
- Browserunterstützung: Temporal ist neu. Firefox unterstützt es ab Version 139, Chromium-Browser ab Version 144. Safari und ältere Umgebungen brauchen einen Polyfill, z. B.
@js-temporal/polyfillodertemporal-polyfill. Vor der Nutzung sollte man prüfen, ob es verfügbar ist, etwa mittypeof Temporal !== "undefined". - Referenztag: Ein
PlainYearMonthspeichert intern einen ISO-Referenztag. Beim ISO-Kalender ist das immer der 1. des Monats. Deshalb lieferttoPlainYearMonth()bei verschiedenen Tagen desselben Monats Objekte, die mitequals()gleich sind. Bei anderen Kalendern (z. B.hebrewoderchinese) kann der Referenztag abweichen. Außerdem enthälttoString()dann den Referenztag und eine Kalenderangabe wie[u-ca=…]. - Kalender bleibt erhalten: Die Methode wandelt nicht in den ISO-Kalender um. Wer einen anderen Kalender braucht, ruft vorher
date.withCalendar("iso8601")auf. - Kein Vergleich mit
<oder>: Temporal-Objekte vergleicht man mitTemporal.PlainYearMonth.compare()oderequals(). Vergleichsoperatoren lösen einenTypeErroraus, weilvalueOf()absichtlich einen Fehler wirft.