Signatur
Beschreibung
Die schreibgeschützte Accessor-Eigenschaft daysInMonth liefert, wie viele Tage der Monat hat, für den ein Temporal.PlainYearMonth steht. Im ISO-8601-Kalender (iso8601, gregorianisch) liegt der Wert zwischen 28 und 31. Schaltjahre sind dabei schon berücksichtigt: Für Februar 2024 kommt 29 heraus, für Februar 2023 28.
Die Eigenschaft ist praktisch, wenn Sie Kalenderansichten aufbauen, Monatsraster erzeugen, Abrechnungszeiträume auf Tage umrechnen oder den letzten Tag eines Monats bestimmen wollen. Tricks wie new Date(jahr, monat + 1, 0).getDate() sind damit überflüssig.
Der Wert hängt vom Kalendersystem der Instanz ab. In nicht-gregorianischen Kalendern (etwa hebrew, chinese oder islamic-umalqura) kann ein Monat 29 oder 30 Tage haben, je nach Regel des Kalenders. Die Eigenschaft hat nur einen Getter. Eine Zuweisung ändert nichts, denn Temporal-Objekte sind unveränderlich.
Rückgabewert
28 und 31.Beispiele
Tage im Februar mit und ohne Schaltjahr
const feb2024 = Temporal.PlainYearMonth.from("2024-02");
const feb2023 = Temporal.PlainYearMonth.from({ year: 2023, month: 2 });
console.log(feb2024.daysInMonth);
console.log(feb2023.daysInMonth);
Letzten Tag eines Monats als PlainDate bestimmen
const ym = Temporal.PlainYearMonth.from("2025-04");
const letzterTag = ym.toPlainDate({ day: ym.daysInMonth });
console.log(letzterTag.toString());
Tage je Monat für ein Jahr auflisten (z. B. für ein Kalenderraster)
const start = Temporal.PlainYearMonth.from("2024-01");
const tageProMonat = Array.from({ length: 12 }, (_, i) => {
const ym = start.add({ months: i });
return `${ym.toString()}: ${ym.daysInMonth}`;
});
console.log(tageProMonat.join("\n"));
Tagesanteilige Abrechnung eines Monatsabos
const monatspreis = 30;
const abrechnungsmonat = Temporal.PlainYearMonth.from("2025-02");
const genutzteTage = 10;
const betrag = (monatspreis / abrechnungsmonat.daysInMonth) * genutzteTage;
console.log(betrag.toFixed(2));
// Wichtig · Fallstricke
- Browser-Unterstützung: Temporal gibt es bisher nur in neueren Browsern (Firefox 139+, Chrome/Edge 144+). Safari und ältere Node.js-Versionen unterstützen es noch nicht. Für den Produktiveinsatz sollten Sie einen Polyfill verwenden, z. B.
@js-temporal/polyfillodertemporal-polyfill. - Kalenderabhängig: Bei Instanzen mit einem anderen Kalender als
iso8601kann der Wert von den gregorianischen Monatslängen abweichen. Setzen Sie deshalb nicht fest 28–31 voraus, wenn Kalender aus Benutzereingaben kommen. - Nur lesbar: Eine Zuweisung wie
ym.daysInMonth = 30hat keine Wirkung und wirft im Strict Mode einenTypeError. Wenn Sie andere Werte brauchen, erzeugen Sie mitwith()oderadd()eine neue Instanz. - Nicht verwechseln mit
daysInYear(Tage im Jahr) undmonthsInYear(Monate im Jahr, z. B. 13 in hebräischen Schaltjahren).