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

如何获取指定日期前N个月的英文月份名称?JS代码问题排查

问题分析与解决方法

原代码问题

原代码的错误在于:d.setDate(d.getDate() - 180)返回的是时间戳(毫秒数),不是Date对象,所以无法直接调用getMonth()方法,会抛出TypeError: d.setDate(...).getMonth is not a function的错误。而且用减180天的方式计算月份不准确,不同月份天数不同,易导致月份偏差。

正确实现思路

要准确获取指定日期之前的N个月份,应直接操作日期的月份属性而非天数:

  1. 基于目标日期(2022年7月28日)创建Date实例;
  2. 循环N次,每次将月份减1,方法会自动处理年份切换(如1月减1月变为去年12月);
  3. 收集每个月份的英文缩写。

代码实现

获取最近6个月的英文月份缩写

// 设定当前日期为2022年7月28日(注意JS中月份是0-based,7月对应6)
const currentDate = new Date(2022, 6, 28);
const months = [];

for (let i = 1; i <= 6; i++) {
  // 创建日期副本,避免修改原日期
  const date = new Date(currentDate);
  // 减去i个月
  date.setMonth(currentDate.getMonth() - i);
  // 获取英文月份缩写
  const monthAbbr = date.toLocaleString('en-US', { month: 'short' });
  months.push(monthAbbr);
}

console.log(months); 
// 输出: ["Jun", "May", "Apr", "Mar", "Feb", "Jan"]

获取最近12个月的英文月份缩写

只需修改循环次数为12:

const currentDate = new Date(2022, 6, 28);
const months = [];

for (let i = 1; i <= 12; i++) {
  const date = new Date(currentDate);
  date.setMonth(currentDate.getMonth() - i);
  const monthAbbr = date.toLocaleString('en-US', { month: 'short' });
  months.push(monthAbbr);
}

console.log(months);
// 输出: ["Jun", "May", "Apr", "Mar", "Feb", "Jan", "Dec", "Nov", "Oct", "Sep", "Aug", "Jul"]

代码说明

  • 创建日期副本是为了避免循环中修改原日期,保证每次计算的基准正确;
  • setMonth()方法会自动处理年份切换,无需额外判断;
  • toLocaleString('en-US', { month: 'short' })可直接获取标准英文月份缩写,兼容性好,无需手动维护月份数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:03:23