Signatur
Beschreibung
setYear() ändert das Jahr eines bestehenden Date-Objekts nach Ortszeit. Monat, Tag und Uhrzeit bleiben gleich. Die Methode verändert das Objekt direkt und gibt den neuen Zeitstempel in Millisekunden seit dem 1. Januar 1970 (UTC) zurück.
Die Besonderheit ist der Umgang mit zweistelligen Jahreszahlen: Liegt der ganzzahlige Anteil von yearValue zwischen 0 und 99, rechnet die Methode 1900 hinzu. Aus 96 wird also 1996, aus 5 wird 1905. Alle anderen Werte werden unverändert als Jahr übernommen, zum Beispiel 2025 oder -44.
Die Methode stammt aus der Anfangszeit von JavaScript und passt zu getYear(), das das Jahr minus 1900 zurückgibt. Beide gelten seit langem als veraltet. Sie stehen nur noch in Anhang B der ECMAScript-Spezifikation, damit alter Code weiter läuft. In neuem Code solltest du immer setFullYear() verwenden. Diese Methode nimmt das Jahr wörtlich und kann außerdem Monat und Tag gleich mit setzen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $yearValue Pflicht | number | Das neue Jahr. Werte von 0 bis 99 (ganzzahliger Anteil) werden als 1900 + yearValue gedeutet, alle anderen Werte wörtlich. Andere Typen werden mit Number() umgewandelt. Ergibt die Umwandlung NaN, wird das Datum ungültig. |
Rückgabewert
yearValue nicht als Zahl verwendbar, ist der Rückgabewert NaN und das Date-Objekt ist danach ungültig.Beispiele
Zweistellige Jahreszahl wird ins 20. Jahrhundert gelegt
const datum = new Date(2024, 2, 15); // 15. März 2024
datum.setYear(96);
console.log(datum.getFullYear());
console.log(datum.getMonth(), datum.getDate()); // Monat und Tag bleiben
Vierstellige Jahreszahl wird wörtlich übernommen
const vertragsende = new Date(2024, 11, 31);
const zeitstempel = vertragsende.setYear(2030);
console.log(vertragsende.getFullYear());
console.log(zeitstempel === vertragsende.getTime());
Fallstrick: setYear() und setFullYear() im Vergleich
const a = new Date(2024, 0, 1);
const b = new Date(2024, 0, 1);
a.setYear(5); // alte Methode: 1900 + 5
b.setFullYear(5); // moderne Methode: wirklich das Jahr 5
console.log(a.getFullYear());
console.log(b.getFullYear());
Ungültige Eingabe macht das Datum ungültig
const datum = new Date(2024, 5, 1);
const ergebnis = datum.setYear('kein Jahr');
console.log(ergebnis);
console.log(Number.isNaN(datum.getTime()));
console.log(String(datum));
// Wichtig · Fallstricke
- Veraltet:
setYear()steht nur in Anhang B der Spezifikation, damit alter Code weiter läuft. Browser und Node.js unterstützen die Methode zwar, in neuem Code solltest du sie aber nicht verwenden. Linter und TypeScript (@deprecated) warnen davor. - Jahre 0 bis 99: Für Jahre der Antike oder des frühen Mittelalters lässt sich
setYear()nicht verwenden, dennsetYear(50)ergibt 1950. MitsetFullYear(50)bekommst du wirklich das Jahr 50. - Ungültiges Datum als Ausgangspunkt: Ist das
Date-Objekt vorher ungültig (NaN), rechnetsetYear()ab dem 1. Januar 1970 00:00 Uhr Ortszeit weiter, statt ungültig zu bleiben. Das Ergebnis kann dadurch überraschen. - Schaltjahre: Steht das Datum auf dem 29. Februar und ist das Zieljahr kein Schaltjahr, springt es auf den 1. März.
- Ortszeit: Die Methode arbeitet mit der lokalen Zeitzone. Eine UTC-Variante gibt es nicht. Nutze dafür
setUTCFullYear(). - Umstellung: Altes
d.setYear(y)kannst du durchd.setFullYear(y >= 0 && y <= 99 ? 1900 + y : y)ersetzen, wenn das alte Verhalten erhalten bleiben muss.