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

Temporal.PlainDateTime.prototype.daysInMonth

Eigenschaft

Liefert als positive Ganzzahl die Anzahl der Tage im Monat einer <code>Temporal.PlainDateTime</code> und berücksichtigt dabei Kalender und Schaltjahre.

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

Signatur

get Temporal.PlainDateTime.prototype.daysInMonth

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

Typ
number
Beschreibung
Positive Ganzzahl mit der Anzahl der Tage im aktuellen Monat, bezogen auf den Kalender der Instanz (im ISO-Kalender 28–31).

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
31 29 28 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());
2024-02-29T17:45:00

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)} €`);
13 von 30 Tagen: 13.00 €

Nicht-gregorianischer Kalender

const dt = Temporal.PlainDateTime.from("2024-03-11T12:00").withCalendar("hebrew");

console.log(dt.monthCode, dt.daysInMonth);
M05L 30

// Wichtig · Fallstricke

  • Browser-Unterstützung: Temporal ist neu (Firefox 139+, Chrome 144+). Safari und ältere Umgebungen brauchen ein Polyfill wie @js-temporal/polyfill oder temporal-polyfill. Vorher prüfen mit typeof Temporal !== "undefined".
  • Nur lesbar: Eine Zuweisung wie dt.daysInMonth = 30 hat keine Wirkung und wirft im Strict Mode einen TypeError. Geänderte Werte erzeugt man mit with() oder add().
  • Kalenderabhängig: Gehen Sie nicht von 28–31 Tagen aus, wenn die Instanz einen anderen Kalender als iso8601 nutzt.
  • Überlauf bei with(): with({ day: 31 }) in einem 30-Tage-Monat setzt den Tag standardmäßig auf 30 (overflow: "constrain"). Mit overflow: "reject" wird stattdessen ein RangeError geworfen. daysInMonth hilft, das vorher zu prüfen.
  • Der Aufruf auf einem Objekt, das keine Temporal.PlainDateTime ist, z. B. über Object.getOwnPropertyDescriptor(...).get.call({}), wirft einen TypeError.