Signatur
Beschreibung
Die Zugriffseigenschaft era liefert die Ära, in die das Datum einer Temporal.ZonedDateTime-Instanz fällt. Welche Ären es gibt, hängt vom Kalender der Instanz ab. Der gregorianische Kalender (gregory) kennt "ce" (unsere Zeitrechnung) und "bce" (vor unserer Zeitrechnung). Der japanische Kalender (japanese) gibt die Kaiserära zurück, z. B. "reiwa" oder "heisei".
Der Standardkalender iso8601 kennt keine Ären. Er arbeitet mit einem durchgehenden Jahreszähler, in dem es ein Jahr 0 und negative Jahre gibt. Deshalb ist era bei ISO-Daten immer undefined.
Die Eigenschaft nutzt man zusammen mit eraYear, um ein Datum so anzuzeigen oder zu verarbeiten, wie es im jeweiligen Kalender üblich ist, z. B. „Reiwa 3“ statt „2021“. Für reine Berechnungen ist year besser geeignet, weil dieser Wert über Ärengrenzen hinweg fortlaufend zählt.
era ist nur lesbar und hat keinen Setter. Eine andere Ära bekommt man über with({ era, eraYear }). Dabei entsteht eine neue Instanz, das Original bleibt unverändert.
Rückgabewert
"ce", "bce" oder "reiwa". Beim Kalender iso8601 und bei anderen Kalendern ohne Ären ist der Wert undefined.Beispiele
ISO-Kalender und gregorianischer Kalender im Vergleich
const iso = Temporal.ZonedDateTime.from("2021-07-01T12:00[Europe/Berlin]");
console.log(iso.era); // ISO 8601 kennt keine Ären
const greg = Temporal.ZonedDateTime.from("2021-07-01T12:00[Europe/Berlin][u-ca=gregory]");
console.log(greg.era, greg.eraYear);
Japanische Kaiserära mit withCalendar() ermitteln
const zdt = Temporal.ZonedDateTime.from("2021-07-01T09:30[Asia/Tokyo]");
const jp = zdt.withCalendar("japanese");
console.log(jp.era);
console.log(`${jp.era} ${jp.eraYear}`);
// Datum vor dem Ärenwechsel am 1. Mai 2019
const vorher = Temporal.ZonedDateTime.from("2019-04-30T12:00[Asia/Tokyo][u-ca=japanese]");
console.log(vorher.era, vorher.eraYear);
Datum vor unserer Zeitrechnung lesbar formatieren
const antik = Temporal.ZonedDateTime.from({
year: -43, // ISO-Jahr -43 = 44 v. u. Z.
month: 3,
day: 15,
hour: 12,
timeZone: "UTC"
}).withCalendar("gregory");
const label = antik.era === "bce" ? "v. u. Z." : "u. Z.";
console.log(`${antik.day}.${antik.month}.${antik.eraYear} ${label}`);
Ära über with() wechseln
const d = Temporal.ZonedDateTime.from("2021-07-01T12:00[UTC][u-ca=gregory]");
const bce = d.with({ era: "bce", eraYear: 100 });
console.log(bce.era, bce.eraYear, bce.year);
// Wichtig · Fallstricke
- Immer auf
undefinedprüfen: Beim Standardkalenderiso8601isteranie gesetzt. Code wiezdt.era.toUpperCase()wirft dann einenTypeError. - Nicht für Anzeigetexte gedacht: Die Werte sind maschinenlesbare Bezeichner, keine übersetzten Texte. Für eine sprachabhängige Ausgabe verwendet man
toLocaleString()oderIntl.DateTimeFormatmit der Optionera. - Bezeichner können abweichen: Bei einigen Kalendern haben sich die Ären-Kennungen im Lauf der Standardisierung geändert, z. B. hießen die gregorianischen Ären früher
"ad"/"bc". Ältere Polyfills oder Engines können daher andere Werte liefern. Beim Vergleichen sollte man das berücksichtigen. - Nicht mit
yearverwechseln:eraYearbeginnt in jeder Ära neu,yearzählt fortlaufend. Für Differenzen und Sortierungenyearverwenden. - Kompatibilität: Temporal ist relativ neu. Firefox unterstützt es ab Version 139, Chrome ab Version 144. In anderen Umgebungen, etwa Safari oder älteren Node.js-Versionen, braucht man einen Polyfill wie
@js-temporal/polyfillodertemporal-polyfill. Nicht-ISO-Kalender setzen außerdem eine vollständige Intl-/ICU-Unterstützung voraus.