Start · Sprachen · JavaScript · Referenz · Date.prototype.setFullYear()

Date.prototype.setFullYear()

Methode

Setzt das Jahr und optional den Monat und den Tag eines <code>Date</code>-Objekts in lokaler Zeit und gibt den neuen Zeitstempel zurück.

seit JavaScript ES1 (Baseline: alle Browser) Kategorie: method-property

Signatur

Date.prototype.setFullYear(yearValue, monthValue, dateValue)

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

Typ
number
Beschreibung
Der neue Zeitstempel in Millisekunden seit dem 1. Januar 1970 00:00:00 UTC. Ist ein Parameter 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());
2030 4 15 10

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());
Wed Dec 24 2025

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());
Sat Mar 01 2025 Fri Feb 28 2025

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());
1950 50

// Wichtig · Fallstricke

  • Das Objekt wird verändert: setFullYear() ändert das Date-Objekt selbst. Soll das Original erhalten bleiben, kopieren Sie es vorher mit new 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 mit setDate(0).
  • Ungültige Datumsobjekte: Anders als die anderen Setter macht setFullYear() ein ungültiges Datum wieder gültig. Zum Beispiel ergibt new 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.