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

Temporal.PlainYearMonth.prototype.eraYear

Eigenschaft

Liefert das Jahr eines <code>Temporal.PlainYearMonth</code> innerhalb seiner Ära als ganze Zahl oder <code>undefined</code>, wenn der Kalender keine Ären kennt.

seit JavaScript Temporal (TC39, Stage 3 → ES2026): Firefox 139+, C Kategorie: method-property

Signatur

get Temporal.PlainYearMonth.prototype.eraYear

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

Typ
number | undefined
Beschreibung
Ganze Zahl, die das Jahr innerhalb der Ära angibt (meist ab 1 gezählt), oder 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);
undefined undefined ce 2024 0 bce 1

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

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()
));
2025 114 (roc)

Ä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);
5 2023 5

// Wichtig · Fallstricke

  • Standardkalender: Bei iso8601 (Standard von Temporal.PlainYearMonth.from("2024-03")) ist eraYear immer undefined. Prüfen Sie vor der Anzeige darauf, sonst erscheint „undefined“ in der Oberfläche.
  • Nicht zum Rechnen verwenden: eraYear springt bei einem Ärenwechsel zurück und zählt vor Christus rückwärts. Für Differenzen und Vergleiche nutzen Sie year, until()/since() oder Temporal.PlainYearMonth.compare().
  • Nur lesbar: Eine Zuweisung wie ym.eraYear = 3 hat keine Wirkung (im Strict Mode gibt es einen TypeError). Verwenden Sie with(); dort müssen era und eraYear gemeinsam angegeben werden, sonst gibt es einen TypeError.
  • Ärencodes ("ce", "bce", "reiwa" …) wurden während der Spezifikation noch angepasst; ältere Polyfills liefern z. B. "gregory"/"gregory-inverse". Für Ausgaben an Nutzer besser toLocaleString() bzw. Intl.DateTimeFormat mit era-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/polyfill oder temporal-polyfill. Ohne vollständige Intl-Kalenderdaten (z. B. Node mit small-icu) funktionieren Nicht-ISO-Kalender eventuell nicht.