Date.prototype.setMonth()
date.setMonth(monthIndex, day)
Définit le mois (0–11, et en option le jour) en heure locale. Les valeurs hors limites décalent l’année.
La méthode modifie la date sur laquelle elle est appelée et renvoie le nouvel horodatage en millisecondes.
Paramètres
- monthIndex – 0 = janvier ; 12 est janvier de l’année suivante, −1 décembre de l’année précédente.
- day – facultatif, le jour du mois.
Valeur de retour
Un nombre – le nouvel horodatage en millisecondes.
Exemples
const d = new Date(2026, 10, 15); d.setMonth(d.getMonth() + 2); console.log(d.getDate(), d.getMonth() + 1, d.getFullYear()); const endOfJanuary = new Date(2026, 0, 31); endOfJanuary.setMonth(1); console.log(endOfJanuary.getDate(), endOfJanuary.getMonth() + 1);
Résultat :
15 1 2027 3 3
Ajout de mois sans débordement – le jour est limité au dernier jour du mois cible :
const addMonths = (date, n) => {
const d = new Date(date.getFullYear(), date.getMonth() + n, 1);
const last = new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate();
d.setDate(Math.min(date.getDate(), last));
return d;
};
const x = addMonths(new Date(2026, 0, 31), 1);
console.log(x.getDate(), x.getMonth() + 1);
Résultat :
28 2
Points d’attention
- Le 31 janvier + 1 mois donne le 3 mars (le 31 février n’existe pas, la date déborde donc). Pour ajouter des mois, limitez le jour (voir l’exemple).
Prise en charge par les navigateurs
Baseline – largement disponible : fonctionne dans tous les navigateurs courants, et depuis longtemps (au plus tard depuis 2015). Depuis la version : Chrome 1, Firefox 1, Safari 1 ; Node.js 0.10.0. État : octobre 2026 (MDN browser-compat-data).
Voir aussi :
Date.prototype.setDate()
Date.prototype.getMonth()
Date.prototype.setFullYear()