Signatur
Beschreibung
Die Zugriffseigenschaft daysInYear liefert, wie viele Tage das Jahr hat, in dem das Datum eines Temporal.PlainDateTime-Objekts liegt. Im ISO-8601-Kalender ("iso8601") ist das 365 für normale Jahre und 366 für Schaltjahre. Die Uhrzeit spielt dabei keine Rolle.
Das Ergebnis hängt vom Kalender der Instanz ab. In Mondkalendern oder lunisolaren Kalendern (z. B. "hebrew", "chinese" oder "islamic-civil") kann ein Jahr deutlich weniger oder mehr Tage haben, etwa 354 oder 383. Wer kalenderunabhängigen Code schreiben will, sollte deshalb nie fest mit 365 oder 366 rechnen, sondern immer daysInYear abfragen.
Typische Einsatzfälle sind Schaltjahrprüfungen, die Berechnung des Jahresfortschritts in Prozent (zusammen mit dayOfYear) und die anteilige Verteilung jährlicher Werte wie Zinsen oder Abonnementgebühren auf einzelne Tage.
Die Eigenschaft ist schreibgeschützt: Sie hat nur einen Getter und keinen Setter. Temporal-Objekte sind unveränderlich. Wenn du ein anderes Jahr brauchst, erzeugst du mit with() oder add() ein neues Objekt.
Rückgabewert
365 oder 366.Beispiele
Tage im Jahr: normales Jahr und Schaltjahr
const normal = Temporal.PlainDateTime.from("2023-06-15T10:30");
const schalt = Temporal.PlainDateTime.from("2024-06-15T10:30");
console.log(normal.daysInYear);
console.log(schalt.daysInYear);
console.log(schalt.inLeapYear);
Jahresfortschritt in Prozent berechnen
const jetzt = Temporal.PlainDateTime.from("2024-07-01T12:00");
// Anteil der vergangenen Tage, inklusive Tagesanteil der Uhrzeit
const tagesAnteil = (jetzt.hour * 60 + jetzt.minute) / 1440;
const fortschritt = ((jetzt.dayOfYear - 1 + tagesAnteil) / jetzt.daysInYear) * 100;
console.log(`${fortschritt.toFixed(2)} % des Jahres ${jetzt.year} sind vorbei`);
Andere Kalender liefern andere Werte
const dt = Temporal.PlainDateTime.from("2024-03-01T08:00");
console.log(dt.daysInYear); // ISO
console.log(dt.withCalendar("hebrew").daysInYear); // Hebräisches Jahr 5784 (Schaltjahr)
console.log(dt.withCalendar("islamic-civil").daysInYear); // Islamisches Mondjahr
Tageszins anteilig berechnen
const berechneTageszins = (betrag, jahreszins, zeitpunkt) =>
(betrag * jahreszins) / zeitpunkt.daysInYear;
const stichtag = Temporal.PlainDateTime.from("2024-12-31T23:59");
console.log(berechneTageszins(10000, 0.035, stichtag).toFixed(4));
// Wichtig · Fallstricke
- Kompatibilität: Temporal ist noch recht neu. Es läuft in Firefox ab 139 und in Chromium-Browsern ab 144, Safari und ältere Node.js-Versionen unterstützen es noch nicht. Für den Produktiveinsatz den Polyfill
@js-temporal/polyfillodertemporal-polyfillverwenden und die Verfügbarkeit mittypeof Temporal !== "undefined"prüfen. - Kalenderabhängigkeit: Nicht davon ausgehen, dass nur
365oder366vorkommen. In nicht-gregorianischen Kalendern sind Werte wie353–385möglich. - Nur lesbar: Eine Zuweisung wie
dt.daysInYear = 360wird im nicht-strikten Modus stillschweigend ignoriert und löst im Strict Mode einenTypeErroraus. - Die Uhrzeit hat keinen Einfluss auf das Ergebnis. Für eine reine Schaltjahrprüfung ist
inLeapYearoft besser lesbar. - Für Zinsberechnungen verwenden Banken oft Konventionen wie „30/360“ oder „act/365“.
daysInYearentspricht nur der „act/act“-Logik.