javascript - 使用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 不会更改日期。
解决方案
根据 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);
推荐阅读
- docker - 使用 JDBC 输入插件在 Docker 上的 Logstash 不会从 SQL Server 获取所有行
- flutter - 如何突出显示我在字符串中搜索的确切单词,而不仅仅是字符串的开头?
- flutter - 如何实时获取文档长度
- javascript - Reactjs 从获取请求中返回一个对象
- javascript - Nginx 正在尝试打开文件而不是重定向到代理
- python - _joint_log_likelihood 给我错误的值
- sql - 如何按日期获取最后一件商品的价格
- python-3.x - 定期执行功能而不停止其他操作
- r - 使用 R 从 PDF 表单到数据框的文本挖掘
- r - 如果 r 中出现错误,则转到 lapply() 的下一次迭代