Signatur
Beschreibung
inLeapYear ist eine schreibgeschützte Accessor-Eigenschaft von Temporal.PlainDate-Instanzen. Sie gibt true zurück, wenn das Jahr des Datums ein Schaltjahr ist, sonst false. Sie ersetzt die bekannte Handarbeit mit year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) und vermeidet damit typische Fehler bei den Jahrhundertregeln.
Was ein Schaltjahr ist, hängt vom Kalender des Datums ab. Im ISO-8601-/gregorianischen Kalender hat ein Schaltjahr 366 statt 365 Tage (29. Februar). In Lunisolarkalendern wie dem hebräischen oder chinesischen Kalender bedeutet Schaltjahr dagegen, dass das Jahr einen zusätzlichen Monat hat. Deshalb ist inLeapYear immer im Zusammenhang mit daysInYear und monthsInYear zu lesen.
Typische Einsatzfälle sind: Eingaben wie „29. Februar“ prüfen, jährlich wiederkehrende Termine berechnen (Geburtstage am 29.02.), Anzahl der Tage im Jahr für Zins- oder Abrechnungslogik bestimmen und kalenderabhängige Darstellungen erzeugen.
Rückgabewert
true, wenn das Jahr des Datums im jeweiligen Kalender ein Schaltjahr ist, sonst false.Beispiele
Schaltjahre im ISO-Kalender prüfen
const dates = ['2023-05-10', '2024-05-10', '1900-01-01', '2000-01-01'];
for (const iso of dates) {
const date = Temporal.PlainDate.from(iso);
console.log(`${date.year}: ${date.inLeapYear} (${date.daysInYear} Tage)`);
}
Nächstes Schaltjahr finden (z. B. für Geburtstage am 29. Februar)
const nextLeapYear = (date) => {
let d = date.with({ month: 1, day: 1 }).add({ years: 1 });
while (!d.inLeapYear) {
d = d.add({ years: 1 });
}
return d.year;
};
const today = Temporal.PlainDate.from('2025-06-01');
const year = nextLeapYear(today);
console.log(`Nächster echter 29. Februar: ${year}-02-29`);
Kalenderabhängigkeit: hebräischer Kalender
const date = Temporal.PlainDate.from('2024-03-15').withCalendar('hebrew');
console.log(date.year); // hebräisches Jahr
console.log(date.inLeapYear); // Schaltjahr mit Zusatzmonat
console.log(date.monthsInYear); // 13 statt 12 Monate
console.log(date.daysInYear);
// Wichtig · Fallstricke
- Nur lesbar: Die Eigenschaft hat keinen Setter. Eine Zuweisung wird im nicht-strikten Modus stillschweigend ignoriert und löst im strikten Modus (z. B. in ES-Modulen) einen
TypeErroraus. Andere Jahre erzeugt man mitwith()oderadd(). - Kalender beachten:
trueheißt nicht automatisch „366 Tage“ oder „es gibt einen 29. Februar“. In Nicht-ISO-Kalendern kann ein Schaltjahr einen zusätzlichen Monat haben. Für Tages- oder MonatszahlendaysInYearbzw.monthsInYearverwenden. - Proleptischer Kalender: Der ISO-Kalender wendet die gregorianischen Regeln auch auf Jahre vor 1582 an. Historische julianische Daten werden daher anders bewertet als in alten Quellen.
- Kompatibilität: Temporal ist neu (Firefox ab 139, Chromium ab 144). In älteren Umgebungen, in Safari und je nach Version auch in Node.js fehlt es noch. Dort den Polyfill
@js-temporal/polyfillverwenden oder vorher mittypeof Temporal !== 'undefined'prüfen, ob Temporal vorhanden ist.