Signatur
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
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);
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
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);
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);
}
// Wichtig · Fallstricke
- Nur lesbar: Eine Zuweisung wie
zdt.year = 2025hat keine Wirkung und wirft im Strict Mode einenTypeError. Nutze stattdessenwith({ year }). Falls das Datum im Zieljahr nicht existiert, etwa der 29. Februar, wird es standardmäßig angepasst (overflow: \"constrain\"). - Lokale Zeit statt UTC:
yearbezieht sich auf die Wanduhrzeit der Zeitzone. Für das Jahr in UTC verwendezdt.withTimeZone(\"UTC\").year. - Jahr 0 und negative Jahre: Im ISO-Kalender entspricht
year === 0dem Jahr 1 v. Chr. Für eine Anzeige mit „v. Chr.“ oder „n. Chr.“ sinderaunderaYearbesser geeignet. - Nicht mit
eraYearverwechseln: 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 alsiso8601setzen voraus, dass Intl vollständig unterstützt wird.