在业务需求中,需要时间一个连续翻页控件,获取每个月的开始时间和结束时间。
最开始的时候,使用 new Date()获取当前的月份为month,然后使用setMonth(month + 1),为下一个月的当前时间,setMonth(month - 1),然后基本使用是没有问题的,但是在今天10月31的时候惊奇的发现,11月居然没有了?
原来setMonth(month + 1)并不是单纯的取到下一个月的时间,
注:setMonth(month + 1)加上的时间是当前月份的天数,如果在当前月份天数大于下一个月的天数,在当前月最后一天就会出现跳月的情况。
相对应的,setMonth(month - 1)减去的时间是上一个月份的天数,如果在上一个月的月份天数大于这个月的天数,在第一天跳转上一天就会出现跳月的情况。
简而言之: T.setMonth(M)方法,即计算时间T的日期在M月上的映射,如果有多的就累加。如果T为10月31号,M为9月,即获取9月的31号,而9月没有31号,就会累加,得到的日期为10月1号。 如果M为8月,8月刚好有31号,即获取时间为8月31号
// 12个月分别对应0 1 2 。。。 11
console.log(new Date(new Date(1572510607000).setMonth(8)))
// Tue Oct 01 2019 16:30:07 GMT+0800 (中国标准时间)
console.log(new Date(new Date(1572510607000).setMonth(7)))
// Sat Aug 31 2019 16:30:07 GMT+0800 (中国标准时间)