You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于JavaScript Date.setDate(-1)日期回滚结果不符预期的疑问

Date.setDate(-1) 为何返回9月29日而非30日?

Date.setDate()的参数逻辑是这样的:它代表当前月份的第N天,如果参数超出当前月份的天数范围,会自动调整月份:

  • 当参数为0时,会跳转到上个月的最后一天
  • 当参数为负数时,会从上个月的最后一天开始往前推对应天数

回到你的测试场景:
初始日期是Wed Oct 23 2024,当前月份为10月。调用now.setDate(-1)时:

  1. 先定位到10月1日的前1天——也就是9月的最后一天(2024年9月有30天,即9月30日)
  2. 再往前推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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:52:07