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
相关产品推荐
相关产品推荐

