Signatur
Beschreibung
Die Methode getYear() liefert das Jahr eines Date-Objekts gemäß der lokalen Zeitzone, allerdings nicht als vollständige Jahreszahl, sondern als Differenz zum Jahr 1900. Für das Jahr 2024 erhält man also 124, für 1995 95 und für 1800 -100.
Dieses Verhalten stammt aus der Frühzeit von JavaScript, als zweistellige Jahreszahlen üblich waren. Es war eine der bekannten Ursachen für Fehler rund um das „Jahr-2000-Problem“: Code, der einfach "19" + date.getYear() zusammensetzte, erzeugte ab dem Jahr 2000 Werte wie "19100".
Die Methode ist veraltet und nur noch aus Kompatibilitätsgründen im Anhang B der ECMAScript-Spezifikation enthalten. In neuem Code sollte man ausschließlich getFullYear() (lokale Zeit) oder getUTCFullYear() (UTC) verwenden. Sinnvoll ist das Wissen über getYear() vor allem beim Pflegen oder Migrieren von Altcode.
Bei einem ungültigen Datum (Invalid Date) gibt die Methode NaN zurück.
Rückgabewert
124 für 2024, -100 für 1800). NaN, wenn das Datum ungültig ist.Beispiele
Grundverhalten: Jahr minus 1900
const daten = [
new Date(1800, 0, 1),
new Date(1995, 11, 17),
new Date(2000, 0, 1),
new Date(2024, 5, 15)
];
for (const d of daten) {
console.log(d.getFullYear(), '→', d.getYear());
}
Typischer Jahr-2000-Fehler in Altcode
const heute = new Date(2024, 0, 10);
// Fehlerhaft: so wurde es früher oft geschrieben
const falsch = '19' + heute.getYear();
// Korrekt
const richtig = String(heute.getFullYear());
console.log(falsch);
console.log(richtig);
Altcode migrieren: getYear() sicher ersetzen
// Hilfsfunktion, falls ein Wert aus getYear() vorliegt
const vollesJahrAusGetYear = (wert) => wert + 1900;
const d = new Date('2023-08-01T12:00:00');
console.log(vollesJahrAusGetYear(d.getYear()));
console.log(d.getFullYear()); // bevorzugte Variante
// Ungültiges Datum
console.log(new Date('kein Datum').getYear());
// Wichtig · Fallstricke
- Veraltet:
getYear()ist nur in Anhang B der Spezifikation („Legacy-Features für Webbrowser“) definiert. Nicht-Browser-Umgebungen müssen sie nicht zwingend anbieten, auch wenn Node.js, Deno und alle großen Browser sie unterstützen. - Keine zweistellige Jahreszahl: Ab 2000 ist der Wert dreistellig (
100,124…), vor 1900 negativ. Wer zweistellige Jahre braucht, nutztString(d.getFullYear()).slice(-2)oderIntl.DateTimeFormatmit{ year: '2-digit' }. - Historisch uneinheitlich: Ältere Browser (z. B. alte Internet-Explorer-Versionen) gaben für Jahre ab 2000 teilweise die volle Jahreszahl zurück. Heutige Engines folgen der Spezifikation (Jahr − 1900).
- Das Gegenstück
setYear()ist ebenfalls veraltet; stattdessensetFullYear()verwenden. - Die Methode arbeitet mit lokaler Zeit – rund um Silvester kann sich das Ergebnis je nach Zeitzone von einer UTC-basierten Berechnung unterscheiden.