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

Temporal.ZonedDateTime.prototype.daysInMonth

Eigenschaft

Liefert die Anzahl der Tage im Monat des Datums einer <code>Temporal.ZonedDateTime</code>-Instanz als positive ganze Zahl, abhängig vom Kalender.

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

Signatur

get Temporal.ZonedDateTime.prototype.daysInMonth

Beschreibung

Die schreibgeschützte Zugriffseigenschaft daysInMonth gibt an, wie viele Tage der Monat hat, in den das Datum einer Temporal.ZonedDateTime fällt. Im ISO-8601-Kalender ("iso8601") ist das 28, 29, 30 oder 31. Schaltjahre werden automatisch berücksichtigt.

Der Wert hängt vom Kalender der Instanz ab, nicht von der Zeitzone. In anderen Kalendern wie "hebrew", "islamic-umalqura" oder "chinese" kann der Monat andere Längen haben (z. B. 29 oder 30 Tage). Die Zeitzone ändert nur, welches lokale Datum zu einem bestimmten Zeitpunkt gilt. Deshalb kann derselbe Zeitpunkt in zwei Zeitzonen in unterschiedliche Monate fallen.

Typische Einsatzfälle sind Kalenderansichten, die Berechnung des letzten Tages im Monat (zdt.with({ day: zdt.daysInMonth })), das anteilige Abrechnen von Monatsbeträgen und das Prüfen von Tageseingaben.

Einen Setter gibt es nicht. Wenn du das Datum ändern willst, verwende with(), add() oder subtract(). Diese Methoden geben jeweils eine neue Instanz zurück.

Rückgabewert

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

Beispiele

Tage im Monat abfragen (inkl. Schaltjahr)

const feb2024 = Temporal.ZonedDateTime.from('2024-02-10T12:00[Europe/Berlin]');
const feb2025 = Temporal.ZonedDateTime.from('2025-02-10T12:00[Europe/Berlin]');
const april = Temporal.ZonedDateTime.from('2025-04-01T00:00[America/New_York]');

console.log(feb2024.daysInMonth); // Schaltjahr
console.log(feb2025.daysInMonth);
console.log(april.daysInMonth);
29 28 30

Letzten Tag des Monats bestimmen

const jetzt = Temporal.ZonedDateTime.from('2025-01-15T09:30[Europe/Berlin]');

// Auf den letzten Tag setzen, Uhrzeit auf Tagesende
const monatsende = jetzt.with({ day: jetzt.daysInMonth })
  .withPlainTime({ hour: 23, minute: 59, second: 59 });

console.log(monatsende.toString());
2025-01-31T23:59:59+01:00[Europe/Berlin]

Monatsbeitrag anteilig berechnen

const berechneAnteil = (start, monatsPreis) => {
  const verbleibendeTage = start.daysInMonth - start.day + 1;
  return Math.round((monatsPreis * verbleibendeTage / start.daysInMonth) * 100) / 100;
};

const beginn = Temporal.ZonedDateTime.from('2025-06-21T10:00[Europe/Vienna]');
console.log(berechneAnteil(beginn, 30)); // 10 von 30 Tagen
10

Zeitzone bestimmt den Monat, Kalender die Länge

const instant = Temporal.Instant.from('2025-01-31T23:30:00Z');

const london = instant.toZonedDateTimeISO('Europe/London');
const berlin = instant.toZonedDateTimeISO('Europe/Berlin');

console.log(london.month, london.daysInMonth); // noch Januar
console.log(berlin.month, berlin.daysInMonth); // schon Februar

const hebraeisch = berlin.withCalendar('hebrew');
console.log(hebraeisch.monthCode, hebraeisch.daysInMonth);
1 31 2 28 M05 30

// Wichtig · Fallstricke

  • Browser-Unterstützung: Temporal ist in Firefox ab Version 139 und in Chrome ab Version 144 verfügbar. Safari unterstützt es noch nicht. Für produktiven Einsatz empfiehlt sich ein Polyfill wie @js-temporal/polyfill oder temporal-polyfill. Vor der Nutzung sollte man mit typeof Temporal !== 'undefined' prüfen, ob die API vorhanden ist.
  • Kalenderabhängig: Bei Nicht-ISO-Kalendern weicht der Wert von der gregorianischen Länge ab. Wer Monatslängen fest mit 28–31 annimmt, bekommt bei withCalendar() falsche Ergebnisse.
  • Zeitzone beachten: Maßgeblich ist das lokale Datum in der Zeitzone der Instanz. Ein UTC-Zeitpunkt kurz vor Mitternacht kann lokal schon im nächsten Monat liegen.
  • Nur lesbar: Eine Zuweisung wie zdt.daysInMonth = 30 ändert nichts; im Strict Mode löst sie einen TypeError aus. Änderungen gehen über with().
  • Sommerzeit-Umstellungen beeinflussen die Anzahl der Stunden eines Tages (siehe hoursInDay), aber nicht die Anzahl der Tage im Monat.