Skip to content

JS-获取时间段内的所有日期

当前字数: 0 字 阅读时长: 0 分钟

需求: 获取两个日期之间的所有日期,返回格式为 YYYY-MM-DD 的数组。

解决方案: 通过循环迭代,逐日增加,生成所有日期。

js
/**
 * 获取指定时间段内的所有日期
 * @param {string} startDateStr - 开始日期,格式为 "YYYY-MM-DD"
 * @param {string} endDateStr - 结束日期,格式为 "YYYY-MM-DD"
 * @returns {string[]} 时间段内的所有日期,格式为 "YYYY-MM-DD"
 */
function getDatesInRange(startDateStr, endDateStr) {
  // 检查输入日期是否有效
  if (!startDateStr || !endDateStr) {
    throw new Error("请提供有效的开始日期和结束日期");
  }

  const startDate = new Date(startDateStr);
  const endDate = new Date(endDateStr);

  // 验证日期是否有效
  if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) {
    throw new Error("无效的日期格式,请使用 'YYYY-MM-DD'");
  }

  // 验证开始日期是否早于或等于结束日期
  if (startDate > endDate) {
    throw new Error("开始日期不能晚于结束日期");
  }

  const dateArray = [];
  let currentDate = new Date(startDate);

  // 循环生成日期
  while (currentDate <= endDate) {
    // 格式化日期为 "YYYY-MM-DD"
    const formattedDate = currentDate.toISOString().split("T")[0];
    dateArray.push(formattedDate);
    // 增加一天
    currentDate.setDate(currentDate.getDate() + 1);
  }

  return dateArray;
}
js
// 示例使用
try {
  const dates = getDatesInRange("2024-12-12", "2025-02-14");
  console.log(dates);
} catch (error) {
  console.error(error.message);
}

// 输出:[  "2024-12-12", "2024-12-13", ..., "2025-02-14" ]

Released under the MIT License.