Start · Sprachen · JavaScript · Referenz · Temporal.ZonedDateTime.prototype.era

Temporal.ZonedDateTime.prototype.era

Eigenschaft

Gibt die Ära des Datums als kalenderspezifische Zeichenkette in Kleinbuchstaben zurück, z. B. <code>"ce"</code> oder <code>"reiwa"</code>. Kennt der Kalender keine Ären, ist der Wert <code>undefined</code>.

seit JavaScript ES2026 (Temporal); Firefox 139+, Chrome 144+, sons Kategorie: method-property

Signatur

get Temporal.ZonedDateTime.prototype.era

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

Typ
string | undefined
Beschreibung
Kalenderspezifischer Bezeichner der Ära in Kleinbuchstaben, z. B. "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);
undefined ce 2021

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);
reiwa reiwa 3 heisei 31

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}`);
15.3.44 v. u. Z.

Ä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);
bce 100 -99

// Wichtig · Fallstricke

  • Immer auf undefined prüfen: Beim Standardkalender iso8601 ist era nie gesetzt. Code wie zdt.era.toUpperCase() wirft dann einen TypeError.
  • Nicht für Anzeigetexte gedacht: Die Werte sind maschinenlesbare Bezeichner, keine übersetzten Texte. Für eine sprachabhängige Ausgabe verwendet man toLocaleString() oder Intl.DateTimeFormat mit der Option era.
  • 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 year verwechseln: eraYear beginnt in jeder Ära neu, year zählt fortlaufend. Für Differenzen und Sortierungen year verwenden.
  • 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/polyfill oder temporal-polyfill. Nicht-ISO-Kalender setzen außerdem eine vollständige Intl-/ICU-Unterstützung voraus.