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

Temporal.ZonedDateTime.prototype.year

Eigenschaft

Gibt das Jahr eines <code>Temporal.ZonedDateTime</code> als ganze Zahl zurück, gezählt ab dem Epochenjahr des verwendeten Kalenders und bezogen auf die lokale Zeit der Zeitzone.

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

Signatur

get Temporal.ZonedDateTime.prototype.year

Beschreibung

Die Zugriffseigenschaft year liefert das Jahr eines Temporal.ZonedDateTime-Objekts als ganze Zahl. Sie ist nur lesbar. Es gibt also keinen Setter. Wenn du das Jahr ändern willst, erzeugst du mit with({ year }) ein neues Objekt.

Wichtig: Der Wert richtet sich nach der lokalen Wanduhrzeit in der gespeicherten Zeitzone. Derselbe Zeitpunkt (Temporal.Instant) kann deshalb in Berlin schon ins Jahr 2025 fallen, während es in New York noch 2024 ist. Das ist gerade für Silvester-Logik, Jahresberichte oder Abrechnungszeiträume wichtig.

Wie das Jahr gezählt wird, hängt vom Kalender ab. Beim Standardkalender iso8601 ist year das proleptische gregorianische Jahr. Es gibt ein Jahr 0 (entspricht 1 v. Chr.), und Jahre davor sind negativ. Bei anderen Kalendern zählt year ab dem Beginn der Epoche des jeweiligen Kalenders, zum Beispiel ergibt sich im hebräischen Kalender etwa 5781. Anders als eraYear ist year ein fortlaufender Zähler. Er fängt bei einem Wechsel der Ära nicht neu an. Deshalb eignet sich year gut zum Rechnen und Vergleichen.

Für die Anzeige gegenüber Nutzern sind meist era und eraYear oder direkt toLocaleString() besser geeignet, weil sie der üblichen Schreibweise im jeweiligen Kalender entsprechen.

Rückgabewert

Typ
number
Beschreibung
Eine ganze Zahl (auch 0 oder negativ möglich): das Jahr dieses Datums im Kalender des Objekts, bezogen auf die lokale Zeit der Zeitzone.

Beispiele

Jahr eines ZonedDateTime auslesen

const zdt = Temporal.ZonedDateTime.from("2021-07-01T12:00:00+02:00[Europe/Berlin]");
console.log(zdt.year);

// Aktuelles Jahr in einer bestimmten Zeitzone
const jetzt = Temporal.Now.zonedDateTimeISO("Europe/Berlin");
console.log(typeof jetzt.year);
2021 number

Die Zeitzone bestimmt das Jahr (Silvester)

const instant = Temporal.Instant.from("2024-12-31T23:30:00Z");

const berlin = instant.toZonedDateTimeISO("Europe/Berlin");
const newYork = instant.toZonedDateTimeISO("America/New_York");

console.log(berlin.year);  // lokal schon 00:30 am 1. Januar
console.log(newYork.year); // lokal erst 18:30 am 31. Dezember
2025 2024

year im Vergleich zu eraYear bei anderen Kalendern

const zdt = Temporal.ZonedDateTime.from("2021-07-01T12:00:00+09:00[Asia/Tokyo]");

const jp = zdt.withCalendar("japanese");
console.log(jp.year, jp.era, jp.eraYear);

const he = zdt.withCalendar("hebrew");
console.log(he.year);
2021 reiwa 3 5781

Jahr ändern mit with() (unveränderliches Objekt)

const schalttag = Temporal.ZonedDateTime.from("2024-02-29T10:00:00+01:00[Europe/Berlin]");

// year ist nur lesbar – with() erzeugt ein neues Objekt
const naechstesJahr = schalttag.with({ year: 2025 });
console.log(naechstesJahr.toString());

// Mit overflow: "reject" wird bei ungültigem Datum ein Fehler geworfen
try {
  schalttag.with({ year: 2025 }, { overflow: "reject" });
} catch (e) {
  console.log(e.constructor.name);
}
2025-02-28T10:00:00+01:00[Europe/Berlin] RangeError

// Wichtig · Fallstricke

  • Nur lesbar: Eine Zuweisung wie zdt.year = 2025 hat keine Wirkung und wirft im Strict Mode einen TypeError. Nutze stattdessen with({ year }). Falls das Datum im Zieljahr nicht existiert, etwa der 29. Februar, wird es standardmäßig angepasst (overflow: \"constrain\").
  • Lokale Zeit statt UTC: year bezieht sich auf die Wanduhrzeit der Zeitzone. Für das Jahr in UTC verwende zdt.withTimeZone(\"UTC\").year.
  • Jahr 0 und negative Jahre: Im ISO-Kalender entspricht year === 0 dem Jahr 1 v. Chr. Für eine Anzeige mit „v. Chr.“ oder „n. Chr.“ sind era und eraYear besser geeignet.
  • Nicht mit eraYear verwechseln: Bei Kalendern mit Ären (z. B. japanese) können sich die beiden Werte deutlich unterscheiden.
  • Kompatibilität: Temporal gibt es erst in neueren Browsern (Firefox 139+, Chrome/Edge 144+). In Safari und älteren Umgebungen brauchst du einen Polyfill wie @js-temporal/polyfill. Andere Kalender als iso8601 setzen voraus, dass Intl vollständig unterstützt wird.