Signatur
Beschreibung
Die Zugriffseigenschaft eraYear liefert zusammen mit era die kalendertypische Jahresangabe eines Datums. Im gregorianischen Kalender (gregory) entspricht der 1. Juli 2021 etwa era: "ce" und eraYear: 2021, während ein Datum vor Christus era: "bce" und ein positives Ärajahr erhält. Im japanischen Kalender beginnt die Zählung mit jeder neuen Ära (z. B. Reiwa) wieder bei 1.
Anders als year, das eine durchgehende, auch negative Jahreszählung ohne Lücke darstellt (0 = 1 v. Chr.), ist eraYear nur zusammen mit era eindeutig. Für Berechnungen und Vergleiche solltest du daher immer year verwenden; era/eraYear sind für Anzeige und kalenderspezifische Eingaben gedacht.
Beim Standardkalender iso8601 gibt es keine Ären – eraYear ist dort undefined. Die Eigenschaft ist schreibgeschützt; ein neues Datum mit geändertem Ärajahr erzeugst du über with({ era, eraYear }).
Rückgabewert
undefined, wenn der Kalender (z. B. iso8601) keine Ären verwendet.Beispiele
ISO- vs. gregorianischer Kalender
const iso = Temporal.PlainDate.from("2021-07-01");
console.log(iso.eraYear); // ISO 8601 kennt keine Ären
const greg = Temporal.PlainDate.from("2021-07-01[u-ca=gregory]");
console.log(greg.era, greg.eraYear);
// ISO-Jahr -2021 = 2022 v. Chr.
const antik = Temporal.PlainDate.from("-002021-07-01[u-ca=gregory]");
console.log(antik.year, antik.era, antik.eraYear);
Japanischer Kalender: Zählung beginnt je Ära neu
const vorher = Temporal.PlainDate.from("2019-04-30").withCalendar("japanese");
const nachher = Temporal.PlainDate.from("2019-05-01").withCalendar("japanese");
console.log(`${vorher.era} ${vorher.eraYear}`);
console.log(`${nachher.era} ${nachher.eraYear}`);
Datum über era und eraYear setzen
const d = Temporal.PlainDate.from("2024-03-15[u-ca=gregory]");
// era und eraYear müssen gemeinsam angegeben werden
const vChr = d.with({ era: "bce", eraYear: 44 });
console.log(vChr.year, vChr.eraYear, vChr.era);
console.log(vChr.toString());
Anzeige mit Fallback für Kalender ohne Ären
const formatJahr = (date) =>
date.eraYear !== undefined
? `${date.eraYear} (${date.era})`
: String(date.year);
console.log(formatJahr(Temporal.PlainDate.from("2025-01-01")));
console.log(formatJahr(Temporal.PlainDate.from("2025-01-01[u-ca=japanese]")));
// Wichtig · Fallstricke
- Nicht für Berechnungen verwenden:
eraYearist ohneeramehrdeutig (1 v. Chr. und 1 n. Chr. haben beideeraYear1). Für Vergleiche und Arithmetikyearbzw.since()/until()nutzen. undefinedeinplanen: Im Standardkalenderiso8601und in weiteren Kalendern ohne Ären ist der Wertundefined– Code sollte das abfangen.with():eraunderaYearmüssen immer paarweise angegeben werden; alternativ nuryear. Nur eines von beiden führt zu einemTypeError.- Ära-Codes: Die Bezeichner (z. B.
"ce"/"bce","reiwa") sind maschinenlesbare Codes, keine übersetzten Anzeigetexte. Für die AnzeigetoLocaleString()bzw.Intl.DateTimeFormatmitera-Option verwenden. Ältere Polyfill-/Entwurfsstände nutzten teils andere Codes (z. B."gregory"/"gregory-inverse"). - In einigen Kalendern kann das Ärajahr theoretisch 0 oder negativ sein, etwa bei Daten vor Beginn der ersten Ära.
- Kompatibilität: Temporal ist in Firefox 139+ und Chrome/Edge 144+ verfügbar, in Safari noch nicht standardmäßig. Für breite Unterstützung einen Polyfill wie
@js-temporal/polyfillodertemporal-polyfilleinsetzen.