Signatur
Beschreibung
Die Zugriffs-Eigenschaft daysInMonth gibt an, wie viele Tage der Monat hat, in dem das Datum einer Temporal.PlainDateTime-Instanz liegt. Im ISO-8601-Kalender (gregorianisch) sind das je nach Monat und Schaltjahr 28, 29, 30 oder 31. Der Uhrzeitanteil der Instanz spielt dabei keine Rolle.
Welcher Kalender gilt, hängt von der Instanz ab. In nicht-gregorianischen Kalendern wie hebrew, chinese oder islamic-umalqura können Monate andere Längen haben. daysInMonth liefert immer den richtigen Wert für den Kalender der Instanz. Deshalb sollte man die Monatslänge nicht mit fest eingetragenen Tabellen berechnen.
Typische Einsatzfälle sind Kalenderansichten (Anzahl der Zellen pro Monat), Prüfungen von Benutzereingaben, Abrechnungen nach Tagen (z. B. anteilige Monatsbeiträge) und Planungen, bei denen etwas am letzten Tag des Monats passieren soll. Die Eigenschaft ist nur lesbar. Einen Setter gibt es nicht, weil Temporal-Objekte unveränderlich sind.
Rückgabewert
Beispiele
Monatslängen im ISO-Kalender abfragen
const jan = Temporal.PlainDateTime.from("2024-01-15T10:30");
const feb = Temporal.PlainDateTime.from("2024-02-10T08:00");
const febNoLeap = Temporal.PlainDateTime.from("2023-02-10T08:00");
const apr = Temporal.PlainDateTime.from("2024-04-01T00:00");
console.log(jan.daysInMonth); // 31
console.log(feb.daysInMonth); // 29 (Schaltjahr)
console.log(febNoLeap.daysInMonth); // 28
console.log(apr.daysInMonth); // 30
Auf den letzten Tag des Monats springen und Uhrzeit behalten
const termin = Temporal.PlainDateTime.from("2024-02-05T17:45");
// Letzter Tag des Monats, Uhrzeit bleibt gleich
const monatsende = termin.with({ day: termin.daysInMonth });
console.log(monatsende.toString());
Anteiliger Monatsbeitrag ab einem Startzeitpunkt
const start = Temporal.PlainDateTime.from("2024-09-18T09:00");
const monatsbeitrag = 30; // Euro
// Verbleibende Tage inklusive Starttag
const restTage = start.daysInMonth - start.day + 1;
const anteil = (monatsbeitrag * restTage) / start.daysInMonth;
console.log(`${restTage} von ${start.daysInMonth} Tagen: ${anteil.toFixed(2)} €`);
Nicht-gregorianischer Kalender
const dt = Temporal.PlainDateTime.from("2024-03-11T12:00").withCalendar("hebrew");
console.log(dt.monthCode, dt.daysInMonth);
// Wichtig · Fallstricke
- Browser-Unterstützung:
Temporalist neu (Firefox 139+, Chrome 144+). Safari und ältere Umgebungen brauchen ein Polyfill wie@js-temporal/polyfillodertemporal-polyfill. Vorher prüfen mittypeof Temporal !== "undefined". - Nur lesbar: Eine Zuweisung wie
dt.daysInMonth = 30hat keine Wirkung und wirft im Strict Mode einenTypeError. Geänderte Werte erzeugt man mitwith()oderadd(). - Kalenderabhängig: Gehen Sie nicht von 28–31 Tagen aus, wenn die Instanz einen anderen Kalender als
iso8601nutzt. - Überlauf bei
with():with({ day: 31 })in einem 30-Tage-Monat setzt den Tag standardmäßig auf 30 (overflow: "constrain"). Mitoverflow: "reject"wird stattdessen einRangeErrorgeworfen.daysInMonthhilft, das vorher zu prüfen. - Der Aufruf auf einem Objekt, das keine
Temporal.PlainDateTimeist, z. B. überObject.getOwnPropertyDescriptor(...).get.call({}), wirft einenTypeError.