Die Methode Date.prototype.setDate() setzt den Tag des Monats eines Date-Objekts in der lokalen Zeitzone. Eine besonders nützliche Eigenschaft: Werte außerhalb des gültigen Bereichs (1–31) werden automatisch in den Folgemonat oder Vormonat überrollt – das macht setDate() zur idealen Methode für jegliche Datumsarithmetik wie „in 30 Tagen” oder „vor 7 Tagen”. Die Methode mutiert die Date-Instanz direkt und gibt zusätzlich den neuen Zeitstempel zurück.
Funktionsweise
setDate() mutiert die bestehende Date-Instanz und gibt zusätzlich den neuen Zeitstempel als Millisekunden seit Epoch zurück. Die automatische Normalisierung ist eine Stärke der Methode:
setDate(0): Setzt das Datum auf den letzten Tag des Vormonats.setDate(32)im Mai: Setzt das Datum auf den 1. Juni.setDate(-5): Setzt das Datum auf 5 Tage vor dem 1. des aktuellen Monats.
Das macht die Methode zum Werkzeug der Wahl für Tagesarithmetik. Wer dagegen eine unveränderte Kopie eines Datums benötigt, sollte vorher mit new Date(date) klonen.
Syntax
date.setDate(dayValue)dayValue Eine Ganzzahl, die den neuen Tag des Monats angibt. Gültige Werte liegen zwischen 1 und 31; abweichende Werte führen zu einem Monatsüberlauf bzw. -unterlauf.
Rückgabewert
Die Anzahl der Millisekunden seit dem 1. Januar 1970 UTC nach der Aktualisierung. Bei einem ungültigen Wert wird NaN zurückgegeben und das Date-Objekt selbst auf einen ungültigen Zustand gesetzt.
Beispiele
Tag explizit setzen
const date = new Date("2026-05-01");
date.setDate(15);
console.log(date.toISOString().slice(0, 10));2026-05-15Automatischer Monatsüberlauf
const date = new Date("2026-05-01");
date.setDate(32);
console.log(date.toISOString().slice(0, 10));2026-06-01Letzter Tag des Vormonats
const date = new Date("2026-05-15");
date.setDate(0);
console.log(date.toISOString().slice(0, 10));2026-04-30Tage zum aktuellen Datum addieren
Klassisches Muster: ein Datum um eine bestimmte Anzahl Tage in die Zukunft verschieben. Dabei wird der Monatsüberlauf automatisch korrekt aufgelöst.
function addiereTage(date, n) {
const result = new Date(date);
result.setDate(result.getDate() + n);
return result;
}
const start = new Date("2026-05-25");
console.log(addiereTage(start, 10).toISOString().slice(0, 10));2026-06-04Tage subtrahieren mit negativen Werten
const date = new Date("2026-05-01");
date.setDate(date.getDate() - 7);
console.log(date.toISOString().slice(0, 10));2026-04-24Hinweise & verwandte Methoden
setDate()mutiert das Date-Objekt. Wer das Original behalten möchte, muss zuvor klonen:new Date(original)odernew Date(original.getTime()).- Für die UTC-Variante:
Date.prototype.setUTCDate(). - Tagesarithmetik mit
setDate()ist zuverlässiger als das simple Addieren von Millisekunden – Letzteres geht bei Sommerzeit-Übergängen schief. - Beim Setzen ungültiger Werte wie
NaNwird das gesamte Date-Objekt invalidiert. MitNumber.isNaN(date.getTime())lässt sich das prüfen.