Signatur
Beschreibung
Die Accessor-Eigenschaft era liefert die Ära, zu der das Jahr eines Temporal.PlainYearMonth-Objekts gehört. Der Wert hängt vom Kalender ab: Im gregorianischen Kalender (gregory) ist das "ce" (unsere Zeitrechnung) oder "bce" (vor unserer Zeitrechnung), im japanischen Kalender z. B. "reiwa", "heisei" oder "showa".
Im Standardkalender iso8601 gibt es keine Ären. Dort ist era immer undefined, und das Jahr wird als fortlaufende Zahl mit Jahr 0 und negativen Jahren angegeben (proleptisches Jahr, siehe year).
era wird fast immer zusammen mit eraYear verwendet: Erst beide Werte zusammen ergeben die Jahresangabe innerhalb der Ära (z. B. „Reiwa 3“). Für eindeutige Berechnungen und Vergleiche verwendet man dagegen year, weil diese Zahl über Äragrenzen hinweg monoton steigt.
Die Eigenschaft ist schreibgeschützt. Um die Ära zu ändern, erzeugt man mit with({ era, eraYear }) ein neues Objekt. Für die Anzeige für Nutzer ist toLocaleString() bzw. Intl.DateTimeFormat meist besser geeignet als eine selbst zusammengesetzte Ausgabe.
Rückgabewert
"ce", "bce", "reiwa") oder undefined, wenn der Kalender keine Ären verwendet (z. B. iso8601).Beispiele
ISO-Kalender im Vergleich zu Kalendern mit Ären
const iso = Temporal.PlainYearMonth.from("2021-07");
console.log(iso.calendarId, iso.era);
const greg = Temporal.PlainYearMonth.from("2021-07-01[u-ca=gregory]");
console.log(greg.calendarId, greg.era, greg.eraYear);
const jap = Temporal.PlainYearMonth.from("2021-07-01[u-ca=japanese]");
console.log(jap.calendarId, jap.era, jap.eraYear);
Jahr vor unserer Zeitrechnung über era und eraYear angeben
// März 44 v. Chr. (Iden des März)
const iden = Temporal.PlainYearMonth.from({
calendar: "gregory",
era: "bce",
eraYear: 44,
month: 3,
});
console.log(iden.era); // Ära
console.log(iden.eraYear); // Jahr innerhalb der Ära
console.log(iden.year); // proleptisches Jahr (mit Jahr 0)
Jahresangabe mit Ära formatieren, mit Rückfall auf year
const formatJahr = (ym) =>
ym.era === undefined
? `${ym.year}`
: `${ym.era.toUpperCase()} ${ym.eraYear}`;
const werte = [
Temporal.PlainYearMonth.from("2019-04"),
Temporal.PlainYearMonth.from("2019-04-01[u-ca=japanese]"),
Temporal.PlainYearMonth.from("2019-05-01[u-ca=japanese]"),
];
werte.forEach((ym) => console.log(formatJahr(ym)));
Ära wechseln mit with()
const ym = Temporal.PlainYearMonth.from("2024-06-01[u-ca=japanese]");
console.log(ym.era, ym.eraYear);
// Neues Objekt: Heisei 10, gleicher Monat
const frueher = ym.with({ era: "heisei", eraYear: 10 });
console.log(frueher.era, frueher.eraYear, frueher.year);
// Wichtig · Fallstricke
- Schreibgeschützt:
erahat nur einen Getter. Eine Zuweisung wieym.era = \"bce\"bleibt ohne Wirkung (im Strict Mode gibt es einenTypeError). Zum Ändern verwendet manwith(). - Im ISO-Kalender immer
undefined:Temporal.PlainYearMonth.from(\"2021-07\")nutztiso8601. Code, der blindym.era.toUpperCase()aufruft, stürzt dort ab. Prüfen Sie deshalb immer aufundefined. - Ära-Bezeichner sind nicht zur Anzeige gedacht: Es sind technische Codes (z. B.
\"bce\"), keine übersetzten Texte. Für lokalisierte Ausgaben nutzt mantoLocaleString()mit passender Locale. - Nicht zum Rechnen verwenden: Für Vergleiche und Sortierung eignet sich
yearoderTemporal.PlainYearMonth.compare(), nicht die Kombination auseraunderaYear. - Spezifikation noch im Fluss: Frühe Polyfills bzw. Engine-Versionen lieferten im gregorianischen Kalender teils andere Codes (z. B.
\"gregory\"/\"gregory-inverse\"statt\"ce\"/\"bce\"). Aliasse wie\"ad\"/\"bc\"werden bei der Eingabe teilweise akzeptiert. - Kompatibilität: Temporal ist noch neu (nativ ab Firefox 139 und Chrome/Edge 144, Safari bislang nicht bzw. nur hinter Flag). Für breite Unterstützung empfiehlt sich ein Polyfill wie
@js-temporal/polyfillodertemporal-polyfill.