Start · Sprachen · JavaScript · Referenz · Temporal.ZonedDateTime.prototype.eraYear

Temporal.ZonedDateTime.prototype.eraYear

Eigenschaft

Gibt das Jahr innerhalb der Epoche (Ära) des Kalenders als nicht negative ganze Zahl zurück, oder <code>undefined</code>, wenn der Kalender keine Epochen kennt.

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

Signatur

get Temporal.ZonedDateTime.prototype.eraYear

Beschreibung

Die Accessor-Eigenschaft eraYear einer Temporal.ZonedDateTime-Instanz gibt an, das wievielte Jahr der aktuellen Epoche (Ära) das Datum ist. Die Epoche selbst liest du über era aus. Zusammen ergeben era und eraYear die Jahresangabe, die Menschen im jeweiligen Kalender tatsächlich benutzen, zum Beispiel „44 v. Chr.“ im gregorianischen oder „Reiwa 6“ im japanischen Kalender.

Welcher Wert herauskommt, hängt vom Kalender der Instanz ab (calendarId). Der Standardkalender iso8601 kennt keine Epochen, deshalb ist eraYear dort immer undefined. Für Rechnungen und Vergleiche nimmst du besser year. Diese Eigenschaft liefert ein durchlaufendes Jahr mit Vorzeichen, das auch vor dem Jahr 1 eindeutig bleibt. eraYear ist vor allem für die Anzeige gedacht.

Die Eigenschaft kann nur gelesen werden. Einen anderen Wert setzt du mit with({ era, eraYear }). Das erzeugt eine neue Instanz, denn Temporal-Objekte sind unveränderlich. Gib era und eraYear dabei immer zusammen an.

Rückgabewert

Typ
number | undefined
Beschreibung
Eine nicht negative ganze Zahl: das Jahr innerhalb der Epoche. Bei Kalendern ohne Epochen (z. B. iso8601) ist der Wert undefined.

Beispiele

Gregorianischer Kalender: Epoche und Jahr innerhalb der Epoche

const zdt = Temporal.ZonedDateTime.from(
  "2024-05-01T12:00[Europe/Berlin][u-ca=gregory]"
);

console.log(zdt.era);     // Epoche
console.log(zdt.eraYear); // Jahr innerhalb der Epoche
console.log(zdt.year);    // durchlaufendes Jahr
ce 2024 2024

ISO-Kalender kennt keine Epochen

const zdt = Temporal.ZonedDateTime.from("2024-05-01T12:00[Europe/Berlin]");

console.log(zdt.calendarId);
console.log(zdt.era, zdt.eraYear);

// Rückfall auf year, falls eraYear fehlt
const anzeigeJahr = zdt.eraYear ?? zdt.year;
console.log(anzeigeJahr);
iso8601 undefined undefined 2024

Japanischer Kalender: Jahr der Reiwa-Epoche

const zdt = Temporal.ZonedDateTime.from("2024-05-01T12:00[Asia/Tokyo]")
  .withCalendar("japanese");

console.log(`${zdt.era} ${zdt.eraYear}`);
reiwa 6

Datum vor Christus über era und eraYear setzen

const heute = Temporal.ZonedDateTime.from(
  "2024-03-15T10:00[Europe/Rome][u-ca=gregory]"
);

// 15. März 44 v. Chr. – era und eraYear immer zusammen angeben
const iden = heute.with({ era: "bce", eraYear: 44 });

console.log(iden.eraYear, iden.era);
console.log(iden.year); // 1 v. Chr. = Jahr 0, daher -43
44 bce -43

// Wichtig · Fallstricke

  • Standardmäßig undefined: Instanzen ohne Kalenderangabe verwenden iso8601. Dort ist eraYear immer undefined. Wenn du Epochen brauchst, gib den Kalender explizit an, z. B. mit [u-ca=gregory] oder withCalendar().
  • Nicht zum Rechnen verwenden: eraYear beginnt in jeder Epoche neu. Zwei Werte aus verschiedenen Epochen lassen sich also nicht direkt vergleichen. Für Arithmetik und Sortierung nimmst du year oder until()/since().
  • Kein Jahr 0: Im gregorianischen Kalender folgt auf 1 v. Chr. (bce, eraYear 1) direkt 1 n. Chr. Das entsprechende year ist 0 bzw. 1.
  • Kennungen der Epochen: Welche Werte era annehmen kann, hängt von der Implementierung und den Intl-Daten ab. Ältere Polyfills lieferten teilweise abweichende Kennungen, etwa gregory statt ce.
  • Nur lesbar: Eine Zuweisung an zdt.eraYear ändert nichts und wirft im Strict Mode einen TypeError. Verwende stattdessen with().
  • Kompatibilität: Temporal ist erst in neueren Browsern verfügbar (Firefox 139+, Chromium 144+). Für Safari und ältere Umgebungen brauchst du einen Polyfill, z. B. @js-temporal/polyfill oder temporal-polyfill.