Die Methode Date.prototype.setMonth() setzt den 0-basierten Monatsindex eines Date-Objekts in der lokalen Zeitzone. Werte außerhalb von 0–11 führen zu einem automatischen Jahresüberlauf – das ist ideal für Monatsarithmetik wie „in 3 Monaten” oder „vor 6 Monaten”. Wie bei getMonth() muss auch hier die 0-basierte Zählung beachtet werden: Januar = 0, Dezember = 11. Optional kann der Tag des Monats im selben Aufruf gesetzt werden.

Funktionsweise

Da die Monate 0-basiert sind, entspricht setMonth(0) dem Januar und setMonth(11) dem Dezember. Bei Werten wie 12 oder -1 wird das Jahr automatisch entsprechend angepasst:

  • setMonth(13): +1 Jahr, Februar.
  • setMonth(-1): -1 Jahr, Dezember.

Eine Stolperfalle ist die Behandlung von Tagesüberläufen: Wenn das aktuelle Datum z. B. der 31. März ist und setMonth(1) (Februar) gesetzt wird, normalisiert JavaScript zum 3. März – nicht zum 28. Februar. Das ist häufig nicht das gewünschte Verhalten. Wer eine sichere Variante braucht, sollte setMonth(monthValue, 1) mit anschließendem setDate() verwenden.

Syntax

JavaScript Syntax
date.setMonth(monthValue)
date.setMonth(monthValue, dayValue)
Parameter
monthValue

Eine Ganzzahl von 0 (Januar) bis 11 (Dezember).

dayValue

(Optional) Eine Ganzzahl von 1 bis 31, die den Tag des Monats angibt.

Rückgabewert

Die Anzahl der Millisekunden seit dem 1. Januar 1970 UTC nach der Aktualisierung.

Beispiele

Monat setzen

JavaScript Beispiel
const date = new Date("2026-05-01");
date.setMonth(11);
console.log(date.toISOString().slice(0, 10));
Output
2026-12-01

Jahresüberlauf

JavaScript Beispiel
const date = new Date("2026-05-01");
date.setMonth(13);
console.log(date.toISOString().slice(0, 10));
Output
2027-02-01

Monat und Tag in einem Aufruf

JavaScript Beispiel
const date = new Date("2026-05-01");
date.setMonth(11, 24);
console.log(date.toISOString().slice(0, 10));
Output
2026-12-24

Stolperfalle: Tagesüberlauf

Beim Wechsel auf einen kürzeren Monat normalisiert JavaScript automatisch.

JavaScript Beispiel
const date = new Date("2026-03-31");
date.setMonth(1); // Februar 2026 hat nur 28 Tage
console.log(date.toISOString().slice(0, 10));
Output
2026-03-03

Sichere Monatsnavigation auf den Monatsanfang

JavaScript Beispiel
function setzeMonatsanfang(date, monthIndex) {
    const result = new Date(date);
    result.setDate(1);
    result.setMonth(monthIndex);
    return result;
}

console.log(setzeMonatsanfang(new Date("2026-03-31"), 1).toISOString().slice(0, 10));
Output
2026-02-01

Hinweise & verwandte Methoden

  • Für die UTC-Variante: Date.prototype.setUTCMonth().
  • Stolperfalle: Beim Wechsel von einem 31-Tage- in einen 28/29/30-Tage-Monat normalisiert JavaScript automatisch in den Folgemonat. Wer das vermeiden will, sollte zuerst setDate(1) setzen.
  • Die 0-basierte Zählung führt regelmäßig zu Off-by-One-Bugs – Code-Reviews lohnen sich.
  • Die Methode mutiert das Original.
/ Weiter

Zurück zu Date

Zur Übersicht