如何从日期列表统计总天数、周末天数及涉及月份数?
统计日期列表的总天数、周末天数及涉及月份数
问题描述
我有一份时间范围在2023-01-01至2024-01-01的日期列表,格式如下:
[ "2023-01-31T23:00:00.000Z", "2023-02-01T23:00:00.000Z", "2023-02-02T23:00:00.000Z", "2023-02-03T23:00:00.000Z", .... ]
需要统计列表中的总天数、周末天数以及涉及的月份数量,最终输出如下格式的对象:
{ "day": 12, "weekend": 5, "month": 5 }
解决方案(JavaScript实现)
通过遍历日期数组,结合Date对象的方法即可完成统计:
const dateList = [ "2023-01-31T23:00:00.000Z", "2023-02-01T23:00:00.000Z", "2023-02-02T23:00:00.000Z", "2023-02-03T23:00:00.000Z", // 补充其他日期 ]; // 初始化统计变量 const stats = { day: dateList.length, weekend: 0, month: 0 }; // 用集合存储唯一年月组合,避免跨年份同月份重复统计 const uniqueMonths = new Set(); dateList.forEach(dateStr => { const date = new Date(dateStr); // 获取UTC星期数:0=周日,6=周六 const dayOfWeek = date.getUTCDay(); // 统计周末天数 if (dayOfWeek === 0 || dayOfWeek === 6) { stats.weekend++; } // 拼接YYYY-MM格式的年月字符串 const yearMonth = `${date.getUTCFullYear()}-${String(date.getUTCMonth() + 1).padStart(2, '0')}`; uniqueMonths.add(yearMonth); }); // 更新月份数量 stats.month = uniqueMonths.size; console.log(stats);
关键逻辑说明
- 总天数:直接取数组长度,每个元素对应独立一天。
- 周末天数:利用
getUTCDay()获取UTC时区的星期数,判定周日(0)和周六(6)为周末并计数。 - 涉及月份数:通过
Set存储YYYY-MM格式的年月字符串,自动去重后取集合大小,确保不同年份的同月份不会被重复统计。
内容的提问来源于stack exchange,提问作者newstacker
相关产品推荐
相关产品推荐

