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

Temporal.PlainDate.prototype.era

Eigenschaft

Gibt die kalenderabhängige Ära eines <code>Temporal.PlainDate</code> als Zeichenkette in Kleinbuchstaben zurück, z. B. <code>"ce"</code> oder <code>"reiwa"</code>, oder <code>undefined</code>, wenn der Kalender keine Ären kennt.

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

Signatur

get Temporal.PlainDate.prototype.era

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

Typ
string | undefined
Beschreibung
Ein kalenderabhängiger Ära-Bezeichner in Kleinbuchstaben (z. B. "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);
iso8601 undefined ce 2021 reiwa 3

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
bce 2022 -2021

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);
-000043-03-15[u-ca=gregory] ce 44

Ä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" })
);
2024 6 (reiwa) 令和6年

// Wichtig · Fallstricke

  • Im ISO-Kalender immer undefined: Objekte aus Temporal.PlainDate.from("2024-01-01") oder Temporal.Now.plainDateISO() haben keine Ära. Frag im Code also immer auf undefined ab.
  • 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 du toLocaleString() bzw. Intl.DateTimeFormat mit der Option era.
  • 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 year nehmen: eraYear zählt in manchen Ären rückwärts (v. Chr.) und beginnt bei jeder neuen Ära von vorn. Für Vergleiche und Arithmetik ist year oder Temporal.PlainDate.compare() der richtige Weg.
  • Schreibgeschützt: Eine Zuweisung an date.era hat keine Wirkung (im Strict Mode gibt es einen TypeError). Stattdessen nimmst du with().
  • 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/polyfill oder temporal-polyfill. Nicht-ISO-Kalender brauchen außerdem vollständige Intl-/ICU-Daten.