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

Date.prototype.setYear()

Methode

Setzt das Jahr eines <code>Date</code>-Objekts nach Ortszeit. Werte von 0 bis 99 werden als 1900–1999 gedeutet. Veraltet, stattdessen <code>setFullYear()</code> verwenden.

seit JavaScript ES1 (seit ES2015 in Annex B, veraltet) – in allen deprecated seit ja Kategorie: method-property

Signatur

Date.prototype.setYear(yearValue)

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

Typ
number
Beschreibung
Der neue Zeitstempel in Millisekunden seit dem 1. Januar 1970 (UTC). Ist 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
1996 2 15

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());
2030 true

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());
1905 5

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));
NaN true Invalid Date

// 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, denn setYear(50) ergibt 1950. Mit setFullYear(50) bekommst du wirklich das Jahr 50.
  • Ungültiges Datum als Ausgangspunkt: Ist das Date-Objekt vorher ungültig (NaN), rechnet setYear() 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 durch d.setFullYear(y >= 0 && y <= 99 ? 1900 + y : y) ersetzen, wenn das alte Verhalten erhalten bleiben muss.