Signatur
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
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
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));
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));
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);
// 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/polyfillodertemporal-polyfill. Prüfen lässt sich die Unterstützung mittypeof Temporal !== 'undefined'. - Nur lesbar: Wer
ym.inLeapYear = truezuweist, verändert nichts. Im Strict Mode wird einTypeErrorausgelö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, zeigtdaysInMonth. - Vom Kalender abhängig: In Kalendern mit Schaltmonat (hebräisch, chinesisch) hat
inLeapYear === trueeine andere Bedeutung. Dann nicht mit 366 Tagen rechnen, sonderndaysInYearbzw.monthsInYearauswerten. - Wird der Getter auf einem Objekt aufgerufen, das kein
Temporal.PlainYearMonthist (etwa percall), wird einTypeErrorausgelöst.