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

Temporal.PlainDate.prototype.inLeapYear

Eigenschaft

Liefert einen booleschen Wert, der angibt, ob das Datum eines <code>Temporal.PlainDate</code> in einem Schaltjahr seines Kalenders liegt.

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

Signatur

get Temporal.PlainDate.prototype.inLeapYear

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

Typ
boolean
Beschreibung
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)`);
}
2023: false (365 Tage) 2024: true (366 Tage) 1900: false (365 Tage) 2000: true (366 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`);
Nächster echter 29. Februar: 2028-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);
5784 true 13 385

// 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 TypeError aus. Andere Jahre erzeugt man mit with() oder add().
  • Kalender beachten: true heiß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 Monatszahlen daysInYear bzw. monthsInYear verwenden.
  • 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/polyfill verwenden oder vorher mit typeof Temporal !== 'undefined' prüfen, ob Temporal vorhanden ist.