写一个方法获取指定两个日期之间相隔的所有日期

/**
 * 获取指定两个日期之间相隔的所有日期
 * @param {Date} startDate 开始日期
 * @param {Date} endDate 结束日期
 * @returns {Date[]} 日期数组,包含开始日期和结束日期
 */
function getDatesBetween(startDate, endDate) {
  const dates = [];
  const currentDate = new Date(startDate); // 复制开始日期,避免修改原始日期

  while (currentDate <= endDate) {
    dates.push(new Date(currentDate)); //  推入日期对象的副本
    currentDate.setDate(currentDate.getDate() + 1);
  }

  return dates;
}


// 示例用法:
const startDate = new Date('2024-11-20');
const endDate = new Date('2024-11-25');

const dateRange = getDatesBetween(startDate, endDate);

// 格式化输出日期 (可选)
const formattedDates = dateRange.map(date => date.toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' }));

console.log(formattedDates); //  输出: ['2024/11/20', '2024/11/21', '2024/11/22', '2024/11/23', '2024/11/24', '2024/11/25']


// 处理错误情况:
// 1. 开始日期晚于结束日期
const startDate2 = new Date('2024-11-25');
const endDate2 = new Date('2024-11-20');

const dateRange2 = getDatesBetween(startDate2, endDate2);
console.log(dateRange2); // 输出空数组: []


// 2. 参数不是日期对象
const startDate3 = '2024-11-20';
const endDate3 = '2024-11-25';

try {
    const dateRange3 = getDatesBetween(new Date(startDate3), new Date(endDate3));
    console.log(dateRange3.map(date => date.toLocaleDateString()));
} catch (error) {
    console.error("Error:", error); // 如果日期格式无效,会抛出错误
}

改进说明:

  • 创建日期副本: 使用new Date(currentDate) 在循环中创建日期对象的副本。 避免直接修改原始的startDate,防止意外的副作用。
  • 错误处理: 增加了对开始日期晚于结束日期的处理,返回空数组。 也增加了对非日期对象参数的处理,并使用try...catch捕获潜在的错误。
  • 格式化输出 (可选): 使用toLocaleDateString()方法将日期格式化为本地字符串,更易于阅读。 可以根据需要调整locale和options参数。

这个改进版本更加健壮,避免了潜在的问题,并提供了更友好的输出。 记住,在前端处理用户输入的日期字符串时,一定要进行校验和转换,以确保日期格式的有效性。

希望这个改进的版本对您更有帮助!

posted @   王铁柱6  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示