Signatur
Beschreibung
Die Accessor-Eigenschaft inLeapYear ist schreibgeschützt. Sie liefert true, wenn das Jahr des Temporal.PlainDateTime ein Schaltjahr ist, sonst false. Die Uhrzeit spielt dabei keine Rolle. Ausgewertet wird nur der Datumsteil.
Was als Schaltjahr gilt, legt das Kalendersystem der Instanz fest. Im ISO-8601- bzw. gregorianischen Kalender ("iso8601", "gregory") hat ein Schaltjahr einen zusätzlichen Tag, den 29. Februar. Andere Kalender kennen andere Regeln. Im hebräischen Kalender ("hebrew") bekommt ein Schaltjahr zum Beispiel einen ganzen Schaltmonat. Dann ist monthsInYear gleich 13 und nicht nur daysInYear größer.
Die Eigenschaft ist praktisch, wenn du Datumsangaben prüfen, Jahresübersichten bauen oder Sonderfälle rund um den 29. Februar behandeln willst, etwa bei Geburtstagen oder jährlich wiederkehrenden Terminen. Die Schaltjahresregel musst du dafür nicht selbst programmieren (durch 4 teilbar, aber nicht durch 100, außer durch 400).
Rückgabewert
true, wenn das Jahr im Kalendersystem der Instanz ein Schaltjahr ist, sonst false.Beispiele
Einfache Schaltjahr-Prüfung
const dt1 = Temporal.PlainDateTime.from("2024-03-15T10:30");
const dt2 = Temporal.PlainDateTime.from("2023-03-15T10:30");
const dt3 = Temporal.PlainDateTime.from("1900-01-01T00:00");
const dt4 = Temporal.PlainDateTime.from("2000-01-01T00:00");
console.log(dt1.inLeapYear); // 2024
console.log(dt2.inLeapYear); // 2023
console.log(dt3.inLeapYear); // 1900: durch 100 teilbar
console.log(dt4.inLeapYear); // 2000: durch 400 teilbar
Jährlichen Termin am 29. Februar sinnvoll verschieben
const naechsterTermin = (original, jahr) => {
const kandidat = original.with({ year: jahr, day: 1 });
// Liegt das Original auf dem 29.02. und das Zieljahr ist kein Schaltjahr?
if (original.month === 2 && original.day === 29 && !kandidat.inLeapYear) {
return kandidat.with({ month: 3, day: 1 });
}
return original.with({ year: jahr });
};
const geburt = Temporal.PlainDateTime.from("2000-02-29T08:15");
for (const jahr of [2023, 2024, 2025]) {
console.log(naechsterTermin(geburt, jahr).toString());
}
Unterschiedliche Kalendersysteme vergleichen
const iso = Temporal.PlainDateTime.from("2024-04-01T12:00");
const hebr = iso.withCalendar("hebrew");
console.log(iso.inLeapYear, iso.monthsInYear, iso.daysInYear);
console.log(hebr.year, hebr.inLeapYear, hebr.monthsInYear, hebr.daysInYear);
// Wichtig · Fallstricke
- Nur lesbar: Eine Zuweisung wie
dt.inLeapYear = truewird im nicht-strikten Modus einfach ignoriert und löst im strikten Modus einenTypeErroraus. Temporal-Objekte sind unveränderlich. - Abhängig vom Kalender: Das Ergebnis richtet sich nach dem Kalendersystem der Instanz, nicht nach dem ISO-Jahr. Dasselbe Datum kann im ISO-Kalender ein Schaltjahr sein und in einem anderen Kalender nicht, und umgekehrt. Willst du die Länge des Jahres wissen, frag
daysInYearbzw.monthsInYearab, statt voninLeapYearauf 366 Tage zu schließen. - Proleptischer Kalender: Für Jahre vor 1582 wendet der ISO-Kalender die gregorianischen Regeln rückwirkend an. Das weicht von historischen julianischen Daten ab.
- Browser-Unterstützung: Temporal ist erst seit Kurzem in einigen Browsern verfügbar (Firefox 139+, Chrome 144+). Für andere Umgebungen, darunter Safari und ältere Node.js-Versionen, brauchst du einen Polyfill wie
@js-temporal/polyfillodertemporal-polyfill.