如何获取上一年的月份名称?JavaScript代码修正求助
修复月份列表输出的问题
我看了你的代码,主要有两个问题导致输出出现undefined:
- 循环中索引计算未处理跨年场景:当
month - i得到负数时,超出了monthNames数组的索引范围(0-11),自然返回undefined。 - 意外修改了
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
相关产品推荐
相关产品推荐

