Start · Sprachen · JavaScript · Referenz · Temporal.PlainDate.prototype.daysInMonth

Temporal.PlainDate.prototype.daysInMonth

Eigenschaft

Gibt die Anzahl der Tage im Monat des jeweiligen <code>Temporal.PlainDate</code> als positive Ganzzahl zurück, abhängig vom Kalender.

seit JavaScript Temporal (Stage 3 / ES-Vorschlag); Firefox 139+, C Kategorie: method-property

Signatur

get Temporal.PlainDate.prototype.daysInMonth

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

Typ
number
Beschreibung
Positive Ganzzahl: die Anzahl der Tage im Monat dieses Datums, bezogen auf seinen Kalender.

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);
29 28 30

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`);
2025-06-30 Noch 16 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());
29 2024-02-29

Monatslänge in einem anderen Kalender

const datum = Temporal.PlainDate.from('2024-03-15').withCalendar('hebrew');
console.log(datum.monthCode, datum.daysInMonth);
M06 30

// Wichtig · Fallstricke

  • Nur lesbar: Eine Zuweisung wie date.daysInMonth = 31 hat keine Wirkung, im Strict Mode löst sie einen TypeError aus.
  • 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. Mit daysInMonth lä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/polyfill bzw. temporal-polyfill verwenden.
  • Dieselbe Eigenschaft gibt es auch bei Temporal.PlainDateTime, Temporal.PlainYearMonth und Temporal.ZonedDateTime.