关于JavaScript Date.setDate(-1)日期回滚结果不符预期的疑问
Date.setDate(-1) 为何返回9月29日而非30日?
Date.setDate()的参数逻辑是这样的:它代表当前月份的第N天,如果参数超出当前月份的天数范围,会自动调整月份:
- 当参数为0时,会跳转到上个月的最后一天
- 当参数为负数时,会从上个月的最后一天开始往前推对应天数
回到你的测试场景:
初始日期是Wed Oct 23 2024,当前月份为10月。调用now.setDate(-1)时:
- 先定位到10月1日的前1天——也就是9月的最后一天(2024年9月有30天,即9月30日)
- 再往前推1天(因为参数是-1,等价于从上个月最后一天再减1天),最终得到9月29日
如果想要获取上个月的最后一天,直接使用setDate(0)即可,示例代码:
const now = new Date('Wed Oct 23 2024 00:01:56 GMT-0500'); now.setDate(0); console.log(now); // Sun Sep 30 2024 00:01:56 GMT-0500 (CST)
内容的提问来源于stack exchange,提问作者meallhour
相关产品推荐
相关产品推荐

