`date.setMonth` causes the month to be set too high if `date` is at the end of the month

date, javascript

Solution

Let's break this down:

var d = new Date(); // date is now 2013-01-31
d.setMonth(1);      // date is now 2013-02-31, which is 3 days past 2013-02-28
x = d.getMonth();   // what to do, what to do, 3 days past 2013-02-28 is in March
                    // so, expect x to be March, which is 2

This is only an issue when the day value of `d` is greater than the maximum number of days in the month passed to `setMonth()`. Otherwise, it works as you'd expect.

Problem

A Date object’s `getMonth()` method seems to have a bug. Assuming the Date `d` is `2013-01-31`, I attempt to set the month on `d` like this: ``` const d = new Date(); // 2013-01-31 d.setMonth(8); console.log(d.getMonth()); ``` The result is `9`. Why? I tested this both in Chrome and Firefox. I found out that when it’s the 31st, 30th, or 29th of a month, setting the date to a month that has a fewer number of days causes `getMonth` to return the wrong value.

Original source