如何在Javascript中统计两个日期之间各星期几的数量?
获取两个日期之间各星期几的数量
原生JavaScript实现
无需依赖任何第三方包,直接通过遍历日期区间完成统计:
function countWeekdaysBetween(startDate, endDate) { // 初始化星期计数,对应getDay()返回值:0=周日,1=周一...6=周六 const weekdayCounts = [ { dayOfTheWeek: "Sunday", nbOf: 0 }, { dayOfTheWeek: "Monday", nbOf: 0 }, { dayOfTheWeek: "Tuesday", nbOf: 0 }, { dayOfTheWeek: "Wednesday", nbOf: 0 }, { dayOfTheWeek: "Thursday", nbOf: 0 }, { dayOfTheWeek: "Friday", nbOf: 0 }, { dayOfTheWeek: "Saturday", nbOf: 0 } ]; // 复制日期对象,避免修改原数据 const currentDate = new Date(startDate); // 遍历日期区间 while (currentDate <= endDate) { const dayIndex = currentDate.getDay(); weekdayCounts[dayIndex].nbOf++; // 日期加1天 currentDate.setDate(currentDate.getDate() + 1); } // 调整为周一到周日的顺序返回 return [ weekdayCounts[1], weekdayCounts[2], weekdayCounts[3], weekdayCounts[4], weekdayCounts[5], weekdayCounts[6], weekdayCounts[0] ]; } // 测试示例 const start = new Date('2022-12-01'); const end = new Date('2022-12-31'); console.log(countWeekdaysBetween(start, end)); // 输出结果与示例一致
使用NPM包实现(以date-fns为例)
date-fns是轻量级日期处理库,提供了便捷的日期区间操作方法:
- 先安装包:
npm install date-fns
- 编写统计代码:
import { eachDayOfInterval, format } from 'date-fns'; function countWeekdaysWithDateFns(startDate, endDate) { // 初始化星期计数对象 const counts = { Monday: 0, Tuesday: 0, Wednesday: 0, Thursday: 0, Friday: 0, Saturday: 0, Sunday: 0 }; // 获取区间内所有日期 const days = eachDayOfInterval({ start: startDate, end: endDate }); // 遍历统计每个星期几的数量 days.forEach(day => { const weekdayName = format(day, 'EEEE'); // 获取英文完整星期名称 counts[weekdayName]++; }); // 转换为目标数组格式 return Object.entries(counts).map(([dayOfTheWeek, nbOf]) => ({ dayOfTheWeek, nbOf })); } // 测试示例 const start = new Date('2022-12-01'); const end = new Date('2022-12-31'); console.log(countWeekdaysWithDateFns(start, end));
内容的提问来源于stack exchange,提问作者Sabgramar
相关产品推荐
相关产品推荐

