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

JavaScript如何按自定义间隔获取两个日期之间的日期数组

实现思路与完整可运行代码

核心逻辑依托原生Date对象的自动日期校正能力处理跨月、闰年等边界情况,不需要手动计算每月天数、闰年差值,实现成本低且稳定性高。

  • 第一步:封装解析方法,把输入的dd.MM.yyyy格式日期字符串转换为标准Date对象
  • 第二步:封装间隔递增逻辑,根据传入的单位调用Date对应的set方法实现指定间隔的日期跳转
  • 第三步:从起始日期叠加首次间隔后开始循环,只要生成日期不大于结束日期就格式化加入结果数组,直到超出范围停止循环
// 解析 dd.MM.yyyy 格式的字符串为Date对象
function parseDateStr(dateStr) {
  const [day, month, year] = dateStr.split('.').map(Number);
  return new Date(year, month - 1, day); // JS月份从0开始计数,因此要减1
}

// 按指定间隔和单位递增日期
function addInterval(date, interval, count) {
  const newDate = new Date(date);
  switch(interval) {
    case 'days':
      newDate.setDate(newDate.getDate() + count);
      break;
    case 'week':
      newDate.setDate(newDate.getDate() + count * 7);
      break;
    case 'month':
      newDate.setMonth(newDate.getMonth() + count);
      break;
    case 'year':
      newDate.setFullYear(newDate.getFullYear() + count);
      break;
    default:
      throw new Error('不支持的间隔单位,仅支持days/week/month/year');
  }
  return newDate;
}

// 格式化日期为要求的 dd.MM 格式
function formatDate(date) {
  const day = String(date.getDate()).padStart(2, '0');
  const month = String(date.getMonth() + 1).padStart(2, '0');
  return `${day}.${month}`;
}

// 主方法:生成符合要求的日期数组
function generateDateRange(startStr, endStr, interval, intervalCount) {
  const startDate = parseDateStr(startStr);
  const endDate = parseDateStr(endStr);
  const result = [];

  let currentDate = addInterval(startDate, interval, intervalCount);
  while (currentDate <= endDate) {
    result.push(formatDate(currentDate));
    currentDate = addInterval(currentDate, interval, intervalCount);
  }
  return result;
}

调用示例

const start = "29.09.2021";
const end = "29.10.2021";
const interval = "days";
const intervalCount = 3;

console.log(generateDateRange(start, end, interval, intervalCount))
// 输出结果与你给出的示例完全匹配:
// ['02.10', '05.10', '08.10', '11.10', '14.10', '17.10', '20.10', '23.10', '26.10', '29.10']

补充说明

  • 如果需要起始日期本身也计入结果数组,把currentDate的初始赋值改为startDate即可
  • 如果需要输出完整的dd.MM.yyyy格式,修改formatDate方法拼接年份即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:36:03