Signatur
Beschreibung
Die Accessor-Eigenschaft year liefert das Jahr eines Temporal.PlainDate als ganze Zahl. Beim Standardkalender iso8601 ist das einfach das bekannte ISO-Jahr, etwa 2024. Dabei wird proleptisch gezählt: Das Jahr 1 v. Chr. hat den Wert 0, 2 v. Chr. den Wert -1 und so weiter.
Wichtig ist der Unterschied zu eraYear. year zählt immer fortlaufend ab dem Epochenjahr des Kalenders. Beim Wechsel zwischen Ären springt der Wert also nicht und fängt auch nicht neu an. Deshalb eignet sich year gut für Berechnungen wie Differenzen und Vergleiche oder zum Hochzählen eines Jahres. era und eraYear sind dagegen für die Anzeige für Menschen gedacht, zum Beispiel „12 vor ROC“.
Welcher Wert herauskommt, hängt vom Kalender ab. Beim hebräischen Kalender ist es zum Beispiel 5784, beim buddhistischen 2567 und beim ROC-Kalender (Minguo) 113 für dasselbe Datum. Die Eigenschaft kann nur gelesen werden. Ein Datum mit anderem Jahr erzeugen Sie mit with({ year }). Das ursprüngliche Objekt bleibt dabei unverändert, denn Temporal-Objekte sind unveränderlich.
Rückgabewert
0 oder negativ sein.Beispiele
Jahr eines ISO-Datums auslesen
const date = Temporal.PlainDate.from("2024-03-15");
console.log(date.year);
// Proleptisches ISO-Jahr: 1 v. Chr. = 0
const antik = Temporal.PlainDate.from({ year: 0, month: 1, day: 1 });
console.log(antik.year, antik.toString());
Dasselbe Datum in verschiedenen Kalendern
const iso = Temporal.PlainDate.from("2024-03-15");
for (const cal of ["iso8601", "gregory", "hebrew", "buddhist", "roc"]) {
console.log(cal.padEnd(8), iso.withCalendar(cal).year);
}
// year zählt fortlaufend, eraYear bezieht sich auf die Ära
const alt = Temporal.PlainDate.from("1900-01-01").withCalendar("roc");
console.log(alt.year, alt.eraYear);
Alter berechnen und Jahr ändern mit with()
const geburt = Temporal.PlainDate.from("1990-08-20");
const heute = Temporal.PlainDate.from("2025-06-01");
const geburtstagDiesesJahr = geburt.with({ year: heute.year });
const hatteSchonGeburtstag =
Temporal.PlainDate.compare(geburtstagDiesesJahr, heute) <= 0;
const alter = heute.year - geburt.year - (hatteSchonGeburtstag ? 0 : 1);
console.log(alter);
// Den 29. Februar ins Nicht-Schaltjahr verschieben (Standard: "constrain")
const schalttag = Temporal.PlainDate.from("2024-02-29");
console.log(schalttag.with({ year: schalttag.year + 1 }).toString());
Nur lesbar: Zuweisung schlägt fehl
"use strict";
const date = Temporal.PlainDate.from("2024-03-15");
try {
date.year = 2000;
} catch (err) {
console.log(err instanceof TypeError);
}
// Richtig: neues Objekt erzeugen
const neu = date.with({ year: 2000 });
console.log(date.year, neu.year);
// Wichtig · Fallstricke
- Nur lesbar:
yearist ein Getter ohne Setter. Im Strict Mode, also auch in ES-Modulen und Klassen, löst eine Zuweisung einenTypeErroraus. Ohne Strict Mode wird sie stillschweigend ignoriert. Für ein anderes Jahr verwenden Siewith({ year })oderadd({ years }). yearunderaYearsind nicht dasselbe: Bei Kalendern mit Ären (z. B.gregory,roc,japanese) können die beiden Werte voneinander abweichen.yearist für Berechnungen gedacht,eraunderaYearfür die Anzeige.- Werte ≤ 0 sind möglich: Jahre vor dem Epochenjahr des Kalenders ergeben
0oder negative Werte. Code, der nur positive Jahre erwartet, sollte das berücksichtigen. - Überlauf bei
with(): Wird ein anderes Jahr gesetzt, macht der Standardmodusoverflow: \"constrain\"aus einem 29. Februar in einem Nicht-Schaltjahr den 28. Februar. Mit{ overflow: \"reject\" }wird stattdessen einRangeErrorausgelöst. - Browser-Kompatibilität: Temporal ist noch nicht Baseline. Unterstützt wird es ab Firefox 139 und Chrome/Edge 144, Safari unterstützt es noch nicht. Für den produktiven Einsatz empfiehlt sich ein Polyfill wie
@js-temporal/polyfillodertemporal-polyfill. Kalender außeriso8601setzen außerdem eine Intl-Unterstützung voraus.