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

Temporal.PlainYearMonth.prototype.daysInMonth

Eigenschaft

Gibt die Anzahl der Tage im Monat eines <code>Temporal.PlainYearMonth</code> als positive ganze Zahl zurück, abhängig vom Kalender.

seit JavaScript ES2026 (Temporal, Stage 4) – Firefox 139+, Chrome Kategorie: method-property

Signatur

get Temporal.PlainYearMonth.prototype.daysInMonth

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

Typ
number
Beschreibung
Positive ganze Zahl mit der Anzahl der Tage im Monat. Im ISO-Kalender immer zwischen 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);
29 28

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());
2025-04-30

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"));
2024-01: 31 2024-02: 29 2024-03: 31 2024-04: 30 2024-05: 31 2024-06: 30 2024-07: 31 2024-08: 31 2024-09: 30 2024-10: 31 2024-11: 30 2024-12: 31

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));
10.71

// 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/polyfill oder temporal-polyfill.
  • Kalenderabhängig: Bei Instanzen mit einem anderen Kalender als iso8601 kann 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 = 30 hat keine Wirkung und wirft im Strict Mode einen TypeError. Wenn Sie andere Werte brauchen, erzeugen Sie mit with() oder add() eine neue Instanz.
  • Nicht verwechseln mit daysInYear (Tage im Jahr) und monthsInYear (Monate im Jahr, z. B. 13 in hebräischen Schaltjahren).