Signatur
Beschreibung
Die Zugriffs-Eigenschaft eraYear einer Temporal.PlainDateTime-Instanz liefert die Jahreszahl relativ zur Ära, zu der das Datum gehört. Sie wird immer zusammen mit era ausgewertet: Erst beide zusammen (z. B. era: "reiwa", eraYear: 1) bestimmen ein Jahr eindeutig.
Anders als year, das in allen Kalendern fortlaufend zählt (auch mit 0 und negativen Werten), ist eraYear das Jahr, wie Menschen es in dem jeweiligen Kalender tatsächlich schreiben – etwa „44 v. Chr.“ im gregorianischen oder „Reiwa 5“ im japanischen Kalender. Im gregorianischen Kalender entspricht ISO-Jahr 0 dem Jahr 1 der Ära bce (v. Chr.).
Welcher Wert zurückkommt, hängt komplett vom Kalender ab, den das Objekt über calendarId nutzt. Der Standardkalender iso8601 kennt keine Ären, dort ist eraYear immer undefined. Die Eigenschaft ist schreibgeschützt; einen anderen Wert setzt man über with({ era, eraYear }), wodurch ein neues Objekt entsteht.
Rückgabewert
undefined, wenn der Kalender (z. B. iso8601) keine Ären verwendet.Beispiele
ISO-Kalender vs. gregorianischer Kalender
const iso = Temporal.PlainDateTime.from("2021-07-01T12:34:56");
console.log(iso.calendarId, iso.eraYear);
const greg = Temporal.PlainDateTime.from("2021-07-01T12:34:56[u-ca=gregory]");
console.log(greg.era, greg.eraYear, greg.year);
Daten vor Christus: year und eraYear unterscheiden sich
// Iden des März, 44 v. Chr. = ISO-Jahr -43
const caesar = Temporal.PlainDateTime.from("-000043-03-15T11:00:00[u-ca=gregory]");
console.log(caesar.year); // fortlaufende Zählung
console.log(caesar.eraYear); // Jahr innerhalb der Ära
console.log(caesar.era);
Japanischer Kalender und Ärenwechsel
const letzterHeiseiTag = Temporal.PlainDateTime.from("2019-04-30T23:59[u-ca=japanese]");
const ersterReiwaTag = letzterHeiseiTag.add({ minutes: 1 });
const format = (dt) => `${dt.era} ${dt.eraYear}`;
console.log(format(letzterHeiseiTag));
console.log(format(ersterReiwaTag));
eraYear über with() ändern
const dt = Temporal.PlainDateTime.from("2023-06-10T08:00[u-ca=japanese]");
// eraYear ist schreibgeschützt – with() liefert ein neues Objekt
const geaendert = dt.with({ era: "reiwa", eraYear: 1 });
console.log(geaendert.toString());
// Wichtig · Fallstricke
- Immer mit
erakombinieren:eraYearallein ist mehrdeutig – „Jahr 1“ gibt es in jeder Ära. Zum Speichern oder Vergleichen besseryearoder den ISO-String verwenden. undefinedeinplanen: Im Standardkalenderiso8601und in anderen Kalendern ohne Ären ist der Wertundefined. Code, der rechnet (dt.eraYear + 1), liefert dannNaN.- Kein Setter: Eine Zuweisung wie
dt.eraYear = 5ändert nichts (im Strict ModeTypeError). Stattdessenwith({ era, eraYear })nutzen. - Ären-Bezeichner: Die Werte von
era(z. B.ce/bce) sind im Spezifikationsprozess mehrfach angepasst worden; ältere Polyfill-Versionen können andere Kennungen liefern. - Kompatibilität: Temporal ist noch nicht in allen Browsern verfügbar (u. a. Firefox 139+, Chrome 144+; Safari und ältere Node.js-Versionen noch nicht). Für den produktiven Einsatz ggf. den Polyfill
@js-temporal/polyfillverwenden. Nicht-ISO-Kalender setzen außerdem Intl-Unterstützung voraus.