本文首发于个人博客 Cyy’s Blog
转载请注明出处 https://cyyjs.top/blog/5b602c9e6152f804dfe99fd9

在写一个日期选择组件时,需要获取某个月份的最后一天的数,
我的做法是把当前月份加一,然后将日期设置为0,就获取到了最后一天的日期数:

/*
* 当前为日前为2018-07-31,获取到的日期数为31
*/

let date = new Date()
date.setMonth(date.getMonth() + 1)
date.setDate(0)
date.getDate()

但是我要获取下一个月的时候却获取到了错误的日期数:

/*
* 获取8月份日期数
* 获取到的日期数为30
*/

let date = new Date()
date.setMonth(date.getMonth() + 2) // 增加两个月份
date.setDate(0)
date.getDate()

这是什么原因???

通过一步一步测试发现如下:

// 当前时间是2018-07-31
let date = new Date()

// 获取的月数是6,没有问题
date.getMonth() 


date.setMonth(8) 
date.getMonth()  // 这里却返回了 9 ??

通过查看文档发现,setMonth接收了两个参数

dateObject.setMonth(month,day)
参数 描述
month 必需。一个表示月份的数值,该值介于 0(一月) ~ 11(十二月) 之间。
day 可选。一个表示月的某一天的数值,该值介于 1 ~ 31 之间(以本地时间计)。

原来setMonth是有第二个参数的,如果不传的话,还是当前日期,也就是执行date.setMonth(8)时,将日期改成了9月,但是9月没有31天,只有30天,所以就变成了10月1日了。

原来如此。。此时我们传入第二个参数,就可以拿到正确的日期数了。

date.setMonth(8,1)