Signatur
Beschreibung
Die Zugriffs-Eigenschaft eraYear gibt zurück, welches Jahr innerhalb der aktuellen Ära (Epoche) ein Temporal.PlainYearMonth darstellt. Sie gehört immer zu era: Erst zusammen ergeben beide eine eindeutige Jahresangabe, z. B. era: "reiwa" + eraYear: 1 im japanischen Kalender (entspricht 2019) oder era: "bce" + eraYear: 1 im gregorianischen Kalender (entspricht dem ISO-Jahr 0).
Wie der Wert berechnet wird, hängt vom Kalender der Instanz ab. Der Standardkalender iso8601 kennt keine Ären, dort ist eraYear (wie auch era) undefined. Kalender wie gregory, japanese, roc, buddhist oder ethiopic liefern dagegen einen Zahlenwert. Anders als bei year kann eraYear im Lauf der Zeit auch abnehmen (Jahre vor Christus zählen rückwärts) oder bei einem Ärenwechsel wieder bei 1 anfangen.
Verwenden Sie eraYear vor allem für die Anzeige in Kalendern, in denen Ären kulturell üblich sind, z. B. bei japanischen Behördenformularen. Für Berechnungen, Sortierung und Vergleiche eignet sich year besser, weil dieser Wert über Ärengrenzen hinweg fortlaufend ist. Die Eigenschaft ist schreibgeschützt; einen geänderten Wert erhalten Sie über with({ era, eraYear }), das eine neue Instanz zurückgibt.
Rückgabewert
undefined, wenn der Kalender keine Ären verwendet (z. B. iso8601).Beispiele
ISO- und gregorianischer Kalender im Vergleich
const iso = Temporal.PlainYearMonth.from("2024-03");
console.log(iso.era, iso.eraYear); // ISO kennt keine Ären
const greg = Temporal.PlainYearMonth.from({ year: 2024, month: 3, calendar: "gregory" });
console.log(greg.era, greg.eraYear);
// ISO-Jahr 0 entspricht 1 v. Chr.
const bc = Temporal.PlainYearMonth.from({ year: 0, month: 6, calendar: "gregory" });
console.log(bc.year, bc.era, bc.eraYear);
Japanische Ären – Wechsel von Heisei zu Reiwa
const toJapanese = (iso) =>
Temporal.PlainDate.from(iso).withCalendar("japanese").toPlainYearMonth();
const april = toJapanese("2019-04-01");
const mai = toJapanese("2019-05-01");
console.log(april.era, april.eraYear);
console.log(mai.era, mai.eraYear);
console.log(april.year === mai.year); // year bleibt fortlaufend
Formatierte Anzeige mit Fallback auf year
const formatJahr = (ym) =>
ym.eraYear !== undefined
? `${ym.eraYear} (${ym.era})`
: String(ym.year);
console.log(formatJahr(Temporal.PlainYearMonth.from("2025-11")));
console.log(formatJahr(
Temporal.PlainDate.from("2025-11-01").withCalendar("roc").toPlainYearMonth()
));
Ärenjahr ändern mit with()
const ym = Temporal.PlainDate.from("2019-05-01")
.withCalendar("japanese")
.toPlainYearMonth();
// era und eraYear gemeinsam angeben
const spaeter = ym.with({ era: "reiwa", eraYear: 5 });
console.log(spaeter.eraYear, spaeter.year, spaeter.month);
// Wichtig · Fallstricke
- Standardkalender: Bei
iso8601(Standard vonTemporal.PlainYearMonth.from("2024-03")) isteraYearimmerundefined. Prüfen Sie vor der Anzeige darauf, sonst erscheint „undefined“ in der Oberfläche. - Nicht zum Rechnen verwenden:
eraYearspringt bei einem Ärenwechsel zurück und zählt vor Christus rückwärts. Für Differenzen und Vergleiche nutzen Sieyear,until()/since()oderTemporal.PlainYearMonth.compare(). - Nur lesbar: Eine Zuweisung wie
ym.eraYear = 3hat keine Wirkung (im Strict Mode gibt es einenTypeError). Verwenden Siewith(); dort müsseneraunderaYeargemeinsam angegeben werden, sonst gibt es einenTypeError. - Ärencodes (
"ce","bce","reiwa"…) wurden während der Spezifikation noch angepasst; ältere Polyfills liefern z. B."gregory"/"gregory-inverse". Für Ausgaben an Nutzer bessertoLocaleString()bzw.Intl.DateTimeFormatmitera-Option verwenden. - Kompatibilität: Temporal gibt es bisher nur in Firefox (ab 139) und Chromium-Browsern (ab 144). Für Safari und ältere Node.js-Versionen brauchen Sie einen Polyfill wie
@js-temporal/polyfillodertemporal-polyfill. Ohne vollständige Intl-Kalenderdaten (z. B. Node mitsmall-icu) funktionieren Nicht-ISO-Kalender eventuell nicht.