Start · Sprachen · JavaScript · Referenz · Temporal.PlainDate.prototype.toPlainYearMonth()

Temporal.PlainDate.prototype.toPlainYearMonth()

Methode

Gibt ein neues <code>Temporal.PlainYearMonth</code> zurück, das nur das Jahr und den Monat dieses Datums enthält und denselben Kalender nutzt.

seit JavaScript Temporal (ES-Proposal); Firefox 139+, Chrome 144+ Kategorie: method-property

Signatur

Temporal.PlainDate.prototype.toPlainYearMonth()

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

Typ
Temporal.PlainYearMonth
Beschreibung
Ein neues 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());
2024-07 2024 7 31 2024-07-18

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]);
[ [ '2024-01', 200 ], [ '2024-02', 45 ] ]

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());
2024-02-01 2024-02-29 2024-03

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");
Karte abgelaufen

// 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/polyfill oder temporal-polyfill. Vor der Nutzung sollte man prüfen, ob es verfügbar ist, etwa mit typeof Temporal !== "undefined".
  • Referenztag: Ein PlainYearMonth speichert intern einen ISO-Referenztag. Beim ISO-Kalender ist das immer der 1. des Monats. Deshalb liefert toPlainYearMonth() bei verschiedenen Tagen desselben Monats Objekte, die mit equals() gleich sind. Bei anderen Kalendern (z. B. hebrew oder chinese) kann der Referenztag abweichen. Außerdem enthält toString() 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 mit Temporal.PlainYearMonth.compare() oder equals(). Vergleichsoperatoren lösen einen TypeError aus, weil valueOf() absichtlich einen Fehler wirft.