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

Temporal.PlainDate.prototype.year

Eigenschaft

Gibt das Jahr eines <code>Temporal.PlainDate</code> als Ganzzahl zurück. Es wird fortlaufend ab der Epoche des jeweiligen Kalenders gezählt, ohne Bezug auf Zeitalter (Ären).

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

Signatur

get Temporal.PlainDate.prototype.year

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

Typ
number
Beschreibung
Eine ganze Zahl. Sie gibt das Jahr relativ zum Epochenjahr des Kalenders an und kann auch 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());
2024 0 0000-01-01

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);
iso8601 2024 gregory 2024 hebrew 5784 buddhist 2567 roc 113 -11 12

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());
34 2025-02-28

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);
true 2024 2000

// Wichtig · Fallstricke

  • Nur lesbar: year ist ein Getter ohne Setter. Im Strict Mode, also auch in ES-Modulen und Klassen, löst eine Zuweisung einen TypeError aus. Ohne Strict Mode wird sie stillschweigend ignoriert. Für ein anderes Jahr verwenden Sie with({ year }) oder add({ years }).
  • year und eraYear sind nicht dasselbe: Bei Kalendern mit Ären (z. B. gregory, roc, japanese) können die beiden Werte voneinander abweichen. year ist für Berechnungen gedacht, era und eraYear für die Anzeige.
  • Werte ≤ 0 sind möglich: Jahre vor dem Epochenjahr des Kalenders ergeben 0 oder negative Werte. Code, der nur positive Jahre erwartet, sollte das berücksichtigen.
  • Überlauf bei with(): Wird ein anderes Jahr gesetzt, macht der Standardmodus overflow: \"constrain\" aus einem 29. Februar in einem Nicht-Schaltjahr den 28. Februar. Mit { overflow: \"reject\" } wird stattdessen ein RangeError ausgelö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/polyfill oder temporal-polyfill. Kalender außer iso8601 setzen außerdem eine Intl-Unterstützung voraus.