在项目中遇到了一个需求,判断给定日期范围内是否包含指定的星期几
function checkWeekdayInRange(startDate, endDate, weekday) {
const start = new Date(startDate);
const end = new Date(endDate);
// 将开始日期设置为0点
start.setHours(0, 0, 0, 0);
// 将结束日期设置为23:59:59.999
end.setHours(23, 59, 59, 999);
// 循环遍历日期范围内的每一天,检查该天是否是指定的星期几
for (let d = start; d <= end; d.setDate(d.getDate() + 1)) {
if (d.getDay() === weekday) {
return true;
}
}
// 如果循环结束仍未找到指定的星期几,则返回 false
return false;
}
这个函数接受三个参数:
- startDate: 范围的开始日期。必须是合法的日期字符串(例如 “2023-04-22”)或 Unix 时间戳(以毫秒为单位的整数)。
- endDate: 范围的结束日期。必须与 startDate 格式相同。
- weekday: 要查找的星期几。必须是从 0(周日)到 6(周六)的整数。
函数首先将 startDate 和 endDate 转换为 Date 类型,并将 startDate 的时间部分设置为 0 点,将 endDate 的时间部分设置为 23:59:59.999。这样可以确保日期范围包含了所有的时间点。
然后,函数使用一个循环遍历范围内的每一天,并使用 getDay() 方法获取该天的星期几。如果找到了指定的星期几,则返回 true。如果循环结束仍未找到指定的星期几,则返回 false。
例如,要检查从 2023 年 4 月 22 日到 2023 年 4 月 28 日是否包含周六(即 6),可以这样调用函数:
const result = checkWeekdayInRange("2023-04-22", "2023-04-28", 6);
console.log(result); // true
这个例子会输出 true,因为给定的日期范围内包含了 2023 年 4 月 22 日(周六)。