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

如何获取上一年的月份名称?JavaScript代码修正求助

修复月份列表输出的问题

我看了你的代码,主要有两个问题导致输出出现undefined:

  1. 循环中索引计算未处理跨年场景:当month - i得到负数时,超出了monthNames数组的索引范围(0-11),自然返回undefined。
  2. 意外修改了currentDate对象:currentDate.setDate(12)会直接改变原日期对象的日期值,这会干扰后续的日期比较逻辑,甚至影响月份计算的准确性。

修正后的代码

// Months between years.
const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
let joiningDate = new Date("08-08-2017");
let currentDate = new Date();

// 计算总月份差(修复日期比较逻辑,不修改原currentDate)
let months = (currentDate.getFullYear() - joiningDate.getFullYear()) * 12;
months += currentDate.getMonth() - joiningDate.getMonth();

// 创建临时日期对象做比较,避免修改原currentDate
const tempCurrentDate = new Date(currentDate);
if (joiningDate.getDate() > tempCurrentDate.getDate()) {
    months--;
}

let month = currentDate.getMonth();
for (var i = 0; i < months; i++) {
    // 用取模运算处理跨年索引,确保索引始终在0-11范围内
    const monthIndex = (month - i + 12) % 12;
    console.log(monthNames[monthIndex]);
}

关键修改说明:

  • 日期比较逻辑优化:创建tempCurrentDate副本代替直接修改currentDate,避免原日期对象被篡改导致的逻辑错误。同时修正了判断条件(原代码逻辑反了,应该是当入职日的日期大于当前日期时,要减去一个月)。
  • 索引计算修复:使用(month - i + 12) % 12确保索引始终为非负数且在数组范围内。比如当month - i为-1时,(-1 +12)%12=11,对应Dec,正好符合你的预期。

这样修改后,控制台就能输出连续的月份名称,不会出现undefined了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:10:19