Signatur
Beschreibung
Die Accessor-Eigenschaft daysInMonth liefert, wie viele Tage der Monat hat, in dem das Datum liegt. Beim ISO-8601-Kalender (iso8601) ist das 28, 29, 30 oder 31. Schaltjahre sind schon eingerechnet: Für den Februar 2024 ergibt sich also 29.
Das Ergebnis hängt vom Kalender des Datums ab. In anderen Kalendern, etwa dem hebräischen, islamischen oder chinesischen, haben Monate teils ganz andere Längen, zum Beispiel 29 oder 30 Tage. Deshalb sollte man die Monatslänge nie fest im Code hinterlegen. Wer daysInMonth nutzt, bekommt immer den richtigen Wert.
Typische Anwendungen sind Kalender-Oberflächen (wie viele Zellen braucht ein Monat?), die Berechnung des letzten Tags im Monat, die Prüfung von Eingaben und das tageweise Aufteilen von Monatsbeträgen. Die Eigenschaft ist nur lesbar. Um ein Datum zu ändern, verwendet man with() oder add().
Rückgabewert
Beispiele
Monatslänge inklusive Schaltjahr
const feb2024 = Temporal.PlainDate.from('2024-02-10');
const feb2023 = Temporal.PlainDate.from('2023-02-10');
const april = Temporal.PlainDate.from('2024-04-01');
console.log(feb2024.daysInMonth);
console.log(feb2023.daysInMonth);
console.log(april.daysInMonth);
Letzten Tag des Monats ermitteln
const heute = Temporal.PlainDate.from('2025-06-14');
const monatsende = heute.with({ day: heute.daysInMonth });
const restTage = heute.until(monatsende).days;
console.log(monatsende.toString());
console.log(`Noch ${restTage} Tage bis Monatsende`);
Tage eines Monats für ein Kalender-Raster erzeugen
const monatsTage = (jahr, monat) => {
const erster = Temporal.PlainDate.from({ year: jahr, month: monat, day: 1 });
return Array.from({ length: erster.daysInMonth }, (_, i) => erster.add({ days: i }));
};
const tage = monatsTage(2024, 2);
console.log(tage.length, tage.at(-1).toString());
Monatslänge in einem anderen Kalender
const datum = Temporal.PlainDate.from('2024-03-15').withCalendar('hebrew');
console.log(datum.monthCode, datum.daysInMonth);
// Wichtig · Fallstricke
- Nur lesbar: Eine Zuweisung wie
date.daysInMonth = 31hat keine Wirkung, im Strict Mode löst sie einenTypeErroraus. - Kalenderabhängig: Werte wie 30 oder 31 gelten nur für den ISO- bzw. gregorianischen Kalender. In Nicht-ISO-Kalendern besser nicht mit festen Tabellen arbeiten.
- Addition am Monatsende:
add({ months: 1 })kürzt den Tag standardmäßig (overflow: 'constrain'). So wird aus dem 31.01. der 29.02. bzw. 28.02. MitdaysInMonthlässt sich dieses Verhalten gezielt prüfen. - Kompatibilität: Temporal ist noch nicht in allen Umgebungen verfügbar, zum Beispiel fehlt es in Safari und in älteren Node.js-Versionen. Vorher mit
typeof Temporal !== 'undefined'prüfen oder einen Polyfill wie@js-temporal/polyfillbzw.temporal-polyfillverwenden. - Dieselbe Eigenschaft gibt es auch bei
Temporal.PlainDateTime,Temporal.PlainYearMonthundTemporal.ZonedDateTime.