首页 > 解决方案 > 使用javascript获取上个月的第一个日期

问题描述

以下代码适用于大多数日子。但是,我在 2019 年 7 月 31 日遇到了问题。

var augDate = new Date('2019-08-19T00:00:00');
var julyDate = new Date('2019-07-31T00:00:00');

augDate.setMonth(augDate.getMonth() -1);  
console.log(augDate.getMonth());  //retuns 6, good
console.log(julyDate.getMonth());  //returns 6
julyDate.setMonth(julyDate.getMonth() - 1);  //try to get it to be 5, but it's still 
console.log(julyDate.getMonth());  //still returns 6.  I'm expecting 5

console.log(augDate);
console.log(julyDate);

出于某种原因,对于 7 月 31 日,getMonth() - 1 不会更改日期。

标签: javascript

解决方案


根据 MDN 文档Date#setMonth

月份的当前日期将对此方法的行为产生影响。从概念上讲,它将当月的当天给定的天数与指定为参数的新月的第一天相加,以返回新的日期。例如,如果当前值为 2016 年 8 月 31 日,则调用值为 1 的 setMonth 将返回 2016 年 3 月 2 日。这是因为 2016 年 2 月有 29 天。


实际上它正在更新月份,因为第 6 个月(6 月)没有 31,它会跳到下个月的第一个日期。因此,您可以使用零值更新日期,以便将其设置为上个月的最后一个日期。

根据 MDN 文档Date#setDate

例如,如果为 dayValue 提供 0,则日期将设置为上个月的最后一天。


var augDate = new Date('2019-08-19T00:00:00Z');
var julyDate = new Date('2019-07-31T00:00:00Z');

augDate.setMonth(augDate.getMonth() -1);  
console.log(augDate.getMonth());  
console.log(julyDate.getMonth());  
julyDate.setDate(0); 
console.log(julyDate.getMonth());  

console.log(augDate);
console.log(julyDate);


推荐阅读