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

Temporal.PlainDate.prototype.dayOfYear

Eigenschaft

Liefert den 1-basierten Index des Tages innerhalb seines Jahres als positive ganze Zahl, z. B. <code>1</code> für den 1. Januar im ISO-Kalender.

seit JavaScript ES2026 (Temporal, Stage 4); Firefox 139+, Chrome 1 Kategorie: method-property

Signatur

get Temporal.PlainDate.prototype.dayOfYear

Beschreibung

Die Accessor-Eigenschaft dayOfYear von Temporal.PlainDate-Instanzen gibt an, der wievielte Tag des Jahres das Datum ist. Die Zählung beginnt bei 1. Im ISO-8601-Kalender liegt der Wert zwischen 1 und 365, in Schaltjahren zwischen 1 und 366.

Die Eigenschaft ist schreibgeschützt. Es gibt nur einen Getter und keinen Setter. Um ein Datum mit einem bestimmten Jahrestag zu erzeugen, nimmst du stattdessen den 1. Januar und rechnest mit add({ days: n - 1 }) weiter. Der Wert hängt vom Kalender des Datums ab. Bei nicht-gregorianischen Kalendern wie hebrew oder islamic-umalqura bezieht er sich auf das Jahr des jeweiligen Kalenders, das an einem ganz anderen Tag beginnen kann.

Typische Anwendungen sind fortlaufende Tagesnummern, Julianische Tagesangaben (etwa 2024-060 im ISO-Ordinalformat), Fortschrittsanzeigen für das Jahr, Tagesnummern in Logdateien oder Chargen-Codes in der Produktion. Zusammen mit daysInYear kannst du leicht berechnen, wie viel vom Jahr schon vergangen ist.

Rückgabewert

Typ
number
Beschreibung
Positive ganze Zahl: der 1-basierte Tagesindex im Jahr. Im ISO-Kalender liegt sie zwischen 1 und daysInYear (365 oder 366).

Beispiele

Jahrestag eines Datums auslesen

const datum = Temporal.PlainDate.from('2024-03-01');
console.log(datum.dayOfYear);

// 2024 ist ein Schaltjahr, 2023 nicht
console.log(Temporal.PlainDate.from('2023-03-01').dayOfYear);
console.log(Temporal.PlainDate.from('2024-12-31').dayOfYear);
61 60 366

Jahresfortschritt in Prozent berechnen

const heute = Temporal.Now.plainDateISO();
const fortschritt = (heute.dayOfYear / heute.daysInYear) * 100;
console.log(`Tag ${heute.dayOfYear} von ${heute.daysInYear} (${fortschritt.toFixed(1)} %)`);
z. B. Tag 158 von 366 (43.2 %)

ISO-Ordinaldatum (YYYY-DDD) erzeugen und zurückrechnen

const toOrdinal = (d) => `${d.year}-${String(d.dayOfYear).padStart(3, '0')}`;

const fromOrdinal = (str) => {
  const [jahr, tag] = str.split('-').map(Number);
  // Setter gibt es nicht – daher vom 1. Januar aus addieren
  return Temporal.PlainDate.from({ year: jahr, month: 1, day: 1 }).add({ days: tag - 1 });
};

const d = Temporal.PlainDate.from('2025-02-14');
console.log(toOrdinal(d));
console.log(fromOrdinal('2025-045').toString());
2025-045 2025-02-14

Kalenderabhängigkeit

const iso = Temporal.PlainDate.from('2024-10-03');
const hebr = iso.withCalendar('hebrew');
console.log(iso.dayOfYear);
console.log(hebr.dayOfYear); // Hebräisches Neujahr (Rosch ha-Schana) war am 03.10.2024
277 1

// Wichtig · Fallstricke

  • Schreibgeschützt: datum.dayOfYear = 10 hat keine Wirkung und wirft im Strict Mode einen TypeError. with({ dayOfYear }) wird ebenfalls nicht unterstützt, weil dayOfYear kein gültiges Feld für with() ist.
  • 1-basiert: Anders als bei Date.prototype.getMonth() gibt es hier keinen 0-Index. Der 1. Januar ergibt 1.
  • Schaltjahre: Ab dem 1. März verschiebt sich der Wert in Schaltjahren um 1. Wenn du Jahrestage verschiedener Jahre vergleichst, führt das leicht zu Fehlern um genau einen Tag. Prüfe das mit inLeapYear.
  • Kalender: Der Wert bezieht sich immer auf den Kalender der Instanz. Für ISO-Werte vorher withCalendar('iso8601') verwenden.
  • Kompatibilität: Temporal ist neu. Firefox unterstützt es ab Version 139, Chrome ab Version 144, Safari bisher nicht. In älteren Umgebungen brauchst du ein Polyfill wie @js-temporal/polyfill oder temporal-polyfill. Die gleiche Eigenschaft gibt es auch bei PlainDateTime und ZonedDateTime.