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

JavaScript中如何操作Date日期变量获取指定天数前的格式化日期

你之前的写法存在两个问题:

  • 直接对Date类型的today做减法时,JS会自动将Date对象转为毫秒级时间戳再计算,得到的结果是当前时间戳减2毫秒的数值,不是间隔2天的日期
  • date是拼接好的字符串类型,字符串和数字做减法运算会返回NaN,无法得到预期结果

正确实现可以使用Date对象自带的setDate()方法,该方法会自动处理跨月、跨年等边界情况,无需手动计算月份天数,示例代码如下:

// 通用方法:获取n天前的日期
function getDateNDaysAgo(days) {
  // 新建日期对象,避免修改原有的today变量
  const targetDate = new Date();
  // 减去对应天数
  targetDate.setDate(targetDate.getDate() - days);
  // 按你需要的格式拼接返回
  return `${targetDate.getFullYear()}-${targetDate.getMonth() + 1}-${targetDate.getDate()}`;
}

// 调用测试
console.log(getDateNDaysAgo(2)); // 输出你需要的 2021-9-4

如果需要输出的月、日统一补两位前导零(比如9月显示为09,4号显示为04),可以调整格式化逻辑:

function getFormattedDateNDaysAgo(days) {
  const targetDate = new Date();
  targetDate.setDate(targetDate.getDate() - days);
  const year = targetDate.getFullYear();
  const month = String(targetDate.getMonth() + 1).padStart(2, '0');
  const day = String(targetDate.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
}

console.log(getFormattedDateNDaysAgo(2)); // 输出 2021-09-04

内容的提问来源于stack exchange,提问作者Paul Viorel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:27:03