Signatur
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
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
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);
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}`);
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
// Wichtig · Fallstricke
- Standardmäßig
undefined: Instanzen ohne Kalenderangabe verwendeniso8601. Dort isteraYearimmerundefined. Wenn du Epochen brauchst, gib den Kalender explizit an, z. B. mit[u-ca=gregory]oderwithCalendar(). - Nicht zum Rechnen verwenden:
eraYearbeginnt in jeder Epoche neu. Zwei Werte aus verschiedenen Epochen lassen sich also nicht direkt vergleichen. Für Arithmetik und Sortierung nimmst duyearoderuntil()/since(). - Kein Jahr 0: Im gregorianischen Kalender folgt auf 1 v. Chr. (
bce,eraYear1) direkt 1 n. Chr. Das entsprechendeyearist 0 bzw. 1. - Kennungen der Epochen: Welche Werte
eraannehmen kann, hängt von der Implementierung und den Intl-Daten ab. Ältere Polyfills lieferten teilweise abweichende Kennungen, etwagregorystattce. - Nur lesbar: Eine Zuweisung an
zdt.eraYearändert nichts und wirft im Strict Mode einenTypeError. Verwende stattdessenwith(). - 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/polyfillodertemporal-polyfill.