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

如何生成跨指定时间段、含月份数字与名称的对象数组?

问题:生成覆盖指定年月范围的月份对象数组(含月份名称)

我需要生成一个数组,每个元素对应一个月份对象,覆盖给定的起始年月到结束年月范围。每个对象要同时包含月份名称缩写。比如输入起始日期11/22(2022年11月)、结束日期04/23(2023年4月),期望输出如下结构的数组:

const dataResult = [
    {id: 1, month: "11", monthName: "Nov", year: 2022},
    {id: 2, month: "12", monthName: "Dec", year: 2022},
    {id: 3, month: "01", monthName: "Jan", year: 2023},
    {id: 4, month: "02", monthName: "Feb", year: 2023},
    {id: 5, month: "03", monthName: "Mar", year: 2023},
    {id: 6, month: "04", monthName: "Apr", year: 2023},
]

我已经准备了一个包含月份ID和名称的参考数组,但不知道如何结合它实现需求:

const monthsWithIds = [
    { id: 1, name: "Jan" },
    { id: 2, name: "Feb" },
    { id: 3, name: "Mar" },
    { id: 4, name: "Apr" },
    { id: 5, name: "May" },
    { id: 6, name: "Jun" },
    { id: 7, name: "Jul" },
    { id: 8, name: "Aug" },
    { id: 9, name: "Sep" },
    { id: 10, name: "Oct" },
    { id: 11, name: "Nov" },
    { id: 12, name: "Dec" }
];

解决方案

你可以通过解析起始/结束日期、逐月遍历并匹配参考数组的方式实现需求,具体代码如下:

// 你的月份参考数组
const monthsWithIds = [
  { id: 1, name: "Jan" },
  { id: 2, name: "Feb" },
  { id: 3, name: "Mar" },
  { id: 4, name: "Apr" },
  { id: 5, name: "May" },
  { id: 6, name: "Jun" },
  { id: 7, name: "Jul" },
  { id: 8, name: "Aug" },
  { id: 9, name: "Sep" },
  { id: 10, name: "Oct" },
  { id: 11, name: "Nov" },
  { id: 12, name: "Dec" }
];

// 生成目标数组的函数,接收"MM/YY"格式的起止日期
function generateMonthArray(startDateStr, endDateStr) {
  // 解析起始日期为年份和月份
  const [startMonth, startYearSuffix] = startDateStr.split('/').map(Number);
  const startYear = 2000 + startYearSuffix;
  // 解析结束日期为年份和月份
  const [endMonth, endYearSuffix] = endDateStr.split('/').map(Number);
  const endYear = 2000 + endYearSuffix;

  const result = [];
  let currentYear = startYear;
  let currentMonth = startMonth;
  let id = 1;

  // 循环生成每个月份的对象
  while (true) {
    // 从参考数组中匹配当前月份的名称
    const monthInfo = monthsWithIds.find(item => item.id === currentMonth);
    // 推入目标对象,月份补零为两位字符串
    result.push({
      id: id++,
      month: currentMonth.toString().padStart(2, '0'),
      monthName: monthInfo.name,
      year: currentYear
    });

    // 到达结束日期时终止循环
    if (currentYear === endYear && currentMonth === endMonth) {
      break;
    }

    // 月份递增,处理跨年逻辑
    currentMonth++;
    if (currentMonth > 12) {
      currentMonth = 1;
      currentYear++;
    }
  }

  return result;
}

// 调用示例
const dataResult = generateMonthArray('11/22', '04/23');
console.log(dataResult);

关键说明:

  • 日期解析:将输入的"MM/YY"格式字符串拆分为月份和年份后缀,转换为四位年份(如22→2022)
  • 逐月遍历:使用while循环逐个生成月份对象,遇到12月时自动切换到下一年的1月
  • 月份名称匹配:通过find方法从你的monthsWithIds数组中找到对应月份的缩写
  • 格式统一:用padStart(2, '0')将单个数字的月份转换为两位字符串(如1→"01"),与示例输出一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:00:10