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

Temporal.PlainDateTime.prototype.eraYear

Eigenschaft

Gibt das Jahr innerhalb der Ära als nicht-negative ganze Zahl zurück oder <code>undefined</code>, wenn der Kalender keine Ären kennt.

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

Signatur

get Temporal.PlainDateTime.prototype.eraYear

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

Typ
number | undefined
Beschreibung
Nicht-negative ganze Zahl mit dem Jahr innerhalb der Ära oder 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);
iso8601 undefined ce 2021 2021

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);
-43 44 bce

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));
heisei 31 reiwa 1

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());
2019-06-10T08:00:00[u-ca=japanese]

// Wichtig · Fallstricke

  • Immer mit era kombinieren: eraYear allein ist mehrdeutig – „Jahr 1“ gibt es in jeder Ära. Zum Speichern oder Vergleichen besser year oder den ISO-String verwenden.
  • undefined einplanen: Im Standardkalender iso8601 und in anderen Kalendern ohne Ären ist der Wert undefined. Code, der rechnet (dt.eraYear + 1), liefert dann NaN.
  • Kein Setter: Eine Zuweisung wie dt.eraYear = 5 ändert nichts (im Strict Mode TypeError). Stattdessen with({ 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/polyfill verwenden. Nicht-ISO-Kalender setzen außerdem Intl-Unterstützung voraus.