function myFunction(){
var d = new Date()
d.setMonth(1)
console.log(d.getMonth())
}
上面这段代码,正常来说期待输出值是 1
(代表二月),但是有些情况下输出值是 2
(代表三月)。
根据 MDN 中的描述:
Date.prototype.setMonth 语法如下
dateObj.setMonth(monthValue[, dayValue])
如果不指定 dayValue
参数,就会使用 getDate
方法的返回值。如果有一个指定的参数超出了合理范围,setMonth
会相应地更新日期对象中的日期信息。例如,为 monthValue
指定 15,则年份会加 1,月份将会使用 3。
虽然上面只举例了月份超出的情况,但是可以举一反三推出日期超出合理范围时,月份会加 1。
月份操作的范围是 0-11
,也就是说在上面的代码里,我们设置的是 1
(代表二月)。而当前日期如果超过了二月的日期上限,例如 30(二月没有 30 号),月份就会进位到 2
(代表三月),所以 getMonth
时得到的索引就是 2
(代表三月) 了(再次明确,月份操作的范围是 0-11
)。
原文:https://www.cnblogs.com/phinixsdsd/p/14345470.html