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

Temporal.PlainDate.prototype.eraYear

Eigenschaft

Gibt das Jahr innerhalb der Ära (<code>era</code>) eines <code>Temporal.PlainDate</code> als Ganzzahl zurück oder <code>undefined</code>, wenn der Kalender keine Ären kennt.

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

Signatur

get Temporal.PlainDate.prototype.eraYear

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

Typ
number | undefined
Beschreibung
Das Jahr innerhalb der Ära als Ganzzahl (in üblichen Kalendern ≥ 1) oder 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);
undefined ce 2021 -2021 bce 2022

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

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());
-43 44 bce -000043-03-15[u-ca=gregory]

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]")));
2025 7 (reiwa)

// Wichtig · Fallstricke

  • Nicht für Berechnungen verwenden: eraYear ist ohne era mehrdeutig (1 v. Chr. und 1 n. Chr. haben beide eraYear 1). Für Vergleiche und Arithmetik year bzw. since()/until() nutzen.
  • undefined einplanen: Im Standardkalender iso8601 und in weiteren Kalendern ohne Ären ist der Wert undefined – Code sollte das abfangen.
  • with(): era und eraYear müssen immer paarweise angegeben werden; alternativ nur year. Nur eines von beiden führt zu einem TypeError.
  • Ära-Codes: Die Bezeichner (z. B. "ce"/"bce", "reiwa") sind maschinenlesbare Codes, keine übersetzten Anzeigetexte. Für die Anzeige toLocaleString() bzw. Intl.DateTimeFormat mit era-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/polyfill oder temporal-polyfill einsetzen.