Signatur
Beschreibung
setFullYear() ändert das Jahr eines bestehenden Date-Objekts nach lokaler Zeit. Optional können Sie im selben Aufruf auch Monat und Tag des Monats setzen. Die Methode verändert das Objekt selbst und gibt den neuen Zeitstempel in Millisekunden seit der Unix-Epoche zurück.
Im Gegensatz zur veralteten Methode setYear() wird das Jahr immer vierstellig und wörtlich übernommen: setFullYear(99) setzt wirklich das Jahr 99 und nicht 1999. Deshalb eignet sich die Methode auch für historische Jahre, für Jahre vor Christus (negative Werte) und für Jahre zwischen 0 und 99, die der Date-Konstruktor sonst als 19xx deuten würde.
Werte außerhalb des üblichen Bereichs werden übertragen: monthValue 12 ergibt Januar des Folgejahres, dateValue 0 den letzten Tag des Vormonats. Lassen Sie monthValue oder dateValue weg, werden die aktuellen Werte aus getMonth() bzw. getDate() verwendet. Uhrzeit und Millisekunden bleiben unverändert.
Brauchen Sie UTC-basierte Berechnungen, zum Beispiel für Server-Daten ohne Zeitzonenbezug, verwenden Sie stattdessen setUTCFullYear().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $yearValue Pflicht | number | Das vollständige Jahr als Ganzzahl, z. B. 2025. Negative Werte und Werte von 0 bis 99 werden wörtlich übernommen. |
|
| $monthValue | number | getMonth() | Monat von 0 (Januar) bis 11 (Dezember). Werte außerhalb dieses Bereichs werden auf das Jahr übertragen. |
| $dateValue | number | getDate() | Tag des Monats von 1 bis 31. Wenn Sie dateValue angeben, müssen Sie auch monthValue angeben. 0 ergibt den letzten Tag des Vormonats. |
Rückgabewert
NaN oder ergibt sich ein ungültiges Datum, wird NaN zurückgegeben und das Datum wird ungültig.Beispiele
Jahr eines Datums ändern
const termin = new Date(2024, 4, 15, 10, 30); // 15. Mai 2024, 10:30
termin.setFullYear(2030);
console.log(termin.getFullYear());
console.log(termin.getMonth(), termin.getDate(), termin.getHours());
Jahr, Monat und Tag in einem Aufruf setzen
const d = new Date(2024, 0, 1);
d.setFullYear(2025, 11, 24); // 24. Dezember 2025
console.log(d.toDateString());
Schaltjahr-Falle: 29. Februar plus ein Jahr
const d = new Date(2024, 1, 29); // 29. Februar 2024
d.setFullYear(2025); // 29.02.2025 gibt es nicht, der Tag wird übertragen
console.log(d.toDateString());
// Sicherer Helfer: verändert das Original nicht und bleibt im Monat
const addYears = (date, years) => {
const result = new Date(date);
const month = result.getMonth();
result.setFullYear(result.getFullYear() + years);
if (result.getMonth() !== month) result.setDate(0); // auf den Monatsletzten zurücksetzen
return result;
};
console.log(addYears(new Date(2024, 1, 29), 1).toDateString());
Jahre 0–99 korrekt setzen
// Der Konstruktor deutet 50 als 1950 ...
console.log(new Date(50, 0, 1).getFullYear());
// ... setFullYear übernimmt das Jahr wörtlich
const antik = new Date(2000, 0, 1);
antik.setFullYear(50);
console.log(antik.getFullYear());
// Wichtig · Fallstricke
- Das Objekt wird verändert:
setFullYear()ändert dasDate-Objekt selbst. Soll das Original erhalten bleiben, kopieren Sie es vorher mitnew Date(original). - Übertrag bei Schaltjahren und Monatsenden: Aus dem 29. Februar wird in einem Nicht-Schaltjahr der 1. März. Wenn Sie im Monat bleiben wollen, prüfen Sie danach
getMonth()und korrigieren mitsetDate(0). - Ungültige Datumsobjekte: Anders als die anderen Setter macht
setFullYear()ein ungültiges Datum wieder gültig. Zum Beispiel ergibtnew Date("x").setFullYear(2024)den 1. Januar 2024, 00:00 Uhr lokaler Zeit. - Lokale Zeit und Sommerzeit: Die Berechnung erfolgt in der Zeitzone des Systems. Für zeitzonenunabhängige Logik verwenden Sie
setUTCFullYear(). - Nicht mit
setYear()verwechseln:setYear()ist veraltet und deutet zweistellige Jahre als 19xx. - Kompatibilität: Die Methode wird von allen Browsern und von Node.js unterstützt. Für neue Projekte bietet die
Temporal-API (z. B.Temporal.PlainDate.prototype.add()) eine eindeutigere Datumsrechnung, wird aber noch nicht überall unterstützt.