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

Temporal.PlainYearMonth.prototype.inLeapYear

Eigenschaft

Liefert <code>true</code>, wenn das Jahr dieses <code>Temporal.PlainYearMonth</code> im zugehörigen Kalender ein Schaltjahr ist, sonst <code>false</code>.

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

Signatur

get Temporal.PlainYearMonth.prototype.inLeapYear

Beschreibung

Die Zugriffseigenschaft inLeapYear gibt einen booleschen Wert zurück, der angibt, ob das Jahr eines Temporal.PlainYearMonth ein Schaltjahr ist. Es gibt nur einen Getter und keinen Setter: Temporal-Objekte sind unveränderlich. Einen anderen Jahr-Monat erzeugen Sie mit with(), add() oder subtract().

Was als Schaltjahr gilt, hängt vom Kalender der Instanz ab. Im ISO-8601-/gregorianischen Kalender ist ein Jahr ein Schaltjahr, wenn es durch 4 teilbar ist. Ausnahme sind volle Jahrhunderte: Sie sind nur dann Schaltjahre, wenn sie auch durch 400 teilbar sind. In anderen Kalendern gelten andere Regeln. Im hebräischen oder chinesischen Kalender zum Beispiel hat ein Schaltjahr einen zusätzlichen Monat statt eines zusätzlichen Tages. Dann ist monthsInYear größer als üblich.

Die Eigenschaft bezieht sich immer auf das ganze Jahr und nicht auf den einzelnen Monat. 2024-03 liefert also ebenfalls true, obwohl der Schalttag im Februar liegt. Typische Einsatzfälle sind Abrechnungs- und Kalenderlogik, Hinweise wie „Februar hat diesmal 29 Tage“ und die Prüfung von Jahresdaten, ohne die Schaltjahrregel selbst nachzubauen.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn das Jahr im Kalender der Instanz ein Schaltjahr ist, sonst false.

Beispiele

Einfache Abfrage im ISO-Kalender

const ym1 = Temporal.PlainYearMonth.from('2024-02');
const ym2 = Temporal.PlainYearMonth.from('2023-02');
const ym3 = Temporal.PlainYearMonth.from('1900-02');
const ym4 = Temporal.PlainYearMonth.from('2000-07');

console.log(ym1.inLeapYear);
console.log(ym2.inLeapYear);
console.log(ym3.inLeapYear); // Jahrhundert, nicht durch 400 teilbar
console.log(ym4.inLeapYear); // gilt für das ganze Jahr, auch für Juli
true false false true

Hinweis für die Februar-Abrechnung

const februarInfo = (jahr) => {
  const ym = Temporal.PlainYearMonth.from({ year: jahr, month: 2 });
  return ym.inLeapYear
    ? `Februar ${jahr} hat ${ym.daysInMonth} Tage (Schaltjahr).`
    : `Februar ${jahr} hat ${ym.daysInMonth} Tage.`;
};

console.log(februarInfo(2024));
console.log(februarInfo(2025));
Februar 2024 hat 29 Tage (Schaltjahr). Februar 2025 hat 28 Tage.

Nächste Schaltjahre ab dem aktuellen Monat finden

const naechsteSchaltjahre = (anzahl) => {
  const ergebnis = [];
  let ym = Temporal.Now.plainDateISO().toPlainYearMonth();
  while (ergebnis.length < anzahl) {
    if (ym.inLeapYear) ergebnis.push(ym.year);
    ym = ym.add({ years: 1 });
  }
  return ergebnis;
};

// Ausgabe gilt, wenn das Beispiel 2025 ausgeführt wird
console.log(naechsteSchaltjahre(3));
[2028, 2032, 2036]

Andere Kalender: Schaltmonat statt Schalttag

const hebr = Temporal.PlainDate.from('2024-03-01')
  .withCalendar('hebrew')
  .toPlainYearMonth();

// Hebräisches Jahr 5784 ist ein Schaltjahr mit 13 Monaten
console.log(hebr.year, hebr.inLeapYear, hebr.monthsInYear);
5784 true 13

// Wichtig · Fallstricke

  • Browser-Unterstützung: Temporal ist neu. Firefox unterstützt es ab Version 139, Chrome ab 144. Safari und ältere Node.js-Versionen haben es noch nicht. Wo es fehlt, hilft ein Polyfill wie @js-temporal/polyfill oder temporal-polyfill. Prüfen lässt sich die Unterstützung mit typeof Temporal !== 'undefined'.
  • Nur lesbar: Wer ym.inLeapYear = true zuweist, verändert nichts. Im Strict Mode wird ein TypeError ausgelöst, weil es keinen Setter gibt.
  • Bezieht sich auf das Jahr, nicht auf den Monat: Auch Monate ohne Schalttag liefern in einem Schaltjahr true. Ob der konkrete Monat verlängert ist, zeigt daysInMonth.
  • Vom Kalender abhängig: In Kalendern mit Schaltmonat (hebräisch, chinesisch) hat inLeapYear === true eine andere Bedeutung. Dann nicht mit 366 Tagen rechnen, sondern daysInYear bzw. monthsInYear auswerten.
  • Wird der Getter auf einem Objekt aufgerufen, das kein Temporal.PlainYearMonth ist (etwa per call), wird ein TypeError ausgelöst.