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

JavaScript中如何将日期回退n个月并正确获取对应年份

问题根源

原有代码的核心错误是初始化Date对象时,只设置了目标月份,没有同步设置你给定的目标年份,导致date实例的年份默认是代码运行时的当前年份,回退12个月后自然只能拿到当前年份减12的结果,和你指定的2020年基准年无关。

修复方案

修改初始化后的日期配置逻辑,同时给date实例设置目标年份和月份,确保基准日期完全匹配你的输入参数。JS内置的setMonth方法本身支持自动跨年计算,只要基准日期正确,后续调用getFullYear()就能拿到正确的回退后年份。

修复后完整代码
let month_val = 6;
let year_val = 2020;
let n_val = 12;
let month_names = ["January", "February", "March", "April", "May", "June",
  "July", "August", "September", "October", "November", "December"
];
let date = new Date();
let end_month_text = month_names[month_val - 1];
end_month_text += " " + year_val;

// 同时设置年份和月份,保证基准日期正确
date.setFullYear(year_val);
date.setMonth(month_val - 1); // 注意月份索引从0开始,这里要减1,修复原代码的隐藏问题
date.setMonth(date.getMonth() - n_val);
let start_month_text = month_names[date.getMonth()];
start_month_text += " " + date.getFullYear();
console.log(start_month_text + " - " + end_month_text);
效果说明

原代码还有一个隐藏问题:setMonth传入的参数是从0开始计数的,你传入的month_val是6(代表6月),直接setMonth(6)实际会设置为7月,所以上面的代码也同步修复了这个问题。
按照示例参数输入2020年6月回退12个月,最终输出为June 2019 - June 2020,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:36:09