Signatur
Beschreibung
Die Accessor-Eigenschaft era liefert die Ära (Epoche), zu der ein Datum in seinem Kalendersystem gehört. Welcher Wert herauskommt, hängt vom Kalender des Objekts ab (date.calendarId). Im gregorianischen Kalender (gregory) steht "ce" für „nach Christus“ und "bce" für „vor Christus“. Im japanischen Kalender bekommst du die Regierungsperioden, etwa "reiwa", "heisei" oder "showa".
Der Standardkalender iso8601 kennt keine Ären. Dort ist era immer undefined, und die Jahreszählung läuft durchgehend über year, auch mit dem Jahr 0 und negativen Jahren. era wird erst wichtig, wenn du Daten in einem kulturellen Kalender anzeigen oder verarbeiten willst.
Zusammen mit era gibt es eraYear, das Jahr innerhalb der Ära. Erst die beiden Werte zusammen legen das Jahr eindeutig fest. year dagegen ist eine durchgehende, kalenderabhängige Jahreszahl, mit der du rechnen und vergleichen kannst. Die Eigenschaft ist schreibgeschützt. Ein Datum mit anderer Ära erzeugst du mit date.with({ era, eraYear }).
Rückgabewert
"ce", "bce", "reiwa") oder undefined, wenn der Kalender keine Ären verwendet (etwa iso8601).Beispiele
Ära in verschiedenen Kalendern auslesen
const iso = Temporal.PlainDate.from("2021-07-01");
console.log(iso.calendarId, iso.era);
const greg = Temporal.PlainDate.from("2021-07-01[u-ca=gregory]");
console.log(greg.era, greg.eraYear);
const jp = Temporal.PlainDate.from("2021-07-01[u-ca=japanese]");
console.log(jp.era, jp.eraYear);
Datum vor Christus: era, eraYear und year im Vergleich
// ISO-Jahr -2021 entspricht 2022 v. Chr. (ISO kennt ein Jahr 0)
const antik = Temporal.PlainDate.from("-002021-07-01[u-ca=gregory]");
console.log(antik.era); // Ära
console.log(antik.eraYear); // Jahr innerhalb der Ära
console.log(antik.year); // durchgehende Jahreszahl
Datum über era und eraYear erzeugen bzw. ändern
const d = Temporal.PlainDate.from({
calendar: "gregory",
era: "bce",
eraYear: 44,
month: 3,
day: 15
});
console.log(d.toString());
// Ära wechseln: gleiches Ära-Jahr, aber n. Chr.
const n = d.with({ era: "ce", eraYear: 44 });
console.log(n.era, n.year);
Ära nur anzeigen, wenn der Kalender eine hat
const formatJahr = (date) =>
date.era === undefined
? String(date.year)
: `${date.eraYear} (${date.era})`;
console.log(formatJahr(Temporal.PlainDate.from("2024-05-01")));
console.log(formatJahr(Temporal.PlainDate.from("2024-05-01[u-ca=japanese]")));
// Für Nutzer lieber lokalisiert formatieren:
console.log(
Temporal.PlainDate.from("2024-05-01[u-ca=japanese]")
.toLocaleString("ja-JP-u-ca-japanese", { era: "long", year: "numeric" })
);
// Wichtig · Fallstricke
- Im ISO-Kalender immer
undefined: Objekte ausTemporal.PlainDate.from("2024-01-01")oderTemporal.Now.plainDateISO()haben keine Ära. Frag im Code also immer aufundefinedab. - Die Werte sind interne Bezeichner und nicht für die Anzeige gedacht. Werte wie
"bce"oder"reiwa"sind maschinenlesbare Codes. Für die Ausgabe an Nutzer nimmst dutoLocaleString()bzw.Intl.DateTimeFormatmit der Optionera. - Die Codes sind teils noch nicht einheitlich: Ältere Polyfills und frühe Implementierungen haben zum Teil andere Codes geliefert (z. B.
"gregory"/"gregory-inverse"statt"ce"/"bce"). Vereinheitlicht werden die Codes durch den Vorschlag „Intl Era and Month Code“. Speichere Ära-Codes deshalb nicht dauerhaft, sondern lieber ISO-Datumsangaben. - Zum Rechnen
yearnehmen:eraYearzählt in manchen Ären rückwärts (v. Chr.) und beginnt bei jeder neuen Ära von vorn. Für Vergleiche und Arithmetik istyearoderTemporal.PlainDate.compare()der richtige Weg. - Schreibgeschützt: Eine Zuweisung an
date.erahat keine Wirkung (im Strict Mode gibt es einenTypeError). Stattdessen nimmst duwith(). - Browser-Kompatibilität: Temporal gibt es ab Firefox 139 und Chrome/Edge 144. Safari unterstützt es noch nicht vollständig. Für ältere Umgebungen gibt es Polyfills wie
@js-temporal/polyfillodertemporal-polyfill. Nicht-ISO-Kalender brauchen außerdem vollständige Intl-/ICU-Daten.