如何判断日期数组中的元素是否落在另一数组的指定日期间隔内
检查日期数组元素是否落在指定日期间隔内的实现方案
实现逻辑
- 将所有日期统一转换为时间戳进行数值比较,自动适配时区差异,无需手动处理时区转换
- 遍历所有待检查日期,逐个校验是否落在任意一个给定的区间内
- 区间结束日期默认补齐到当天23:59:59.999,保证结束日期当天的所有时间点都被判定为在区间内,如果不需要包含结束日期可以去掉补齐逻辑
实现代码
// 原有数组 let dateArray = ['2018-05-04T00:00:00+01:00', '2019-04-20T00:00:00+01:00', '2020-05-29T00:00:00+01:00']; let rangesArray = [['2021-09-01','2022-09-01'],['2019-09-01','2020-09-01']]; // 检查单个日期是否落在任意区间的工具函数 function checkDateInRanges(dateStr, ranges) { const checkTime = new Date(dateStr).getTime(); // 时间戳非法直接返回false if (isNaN(checkTime)) return false; return ranges.some(([startStr, endStr]) => { const startTime = new Date(startStr).getTime(); // 结束日期补齐到当天最后一毫秒 const endTime = new Date(endStr).getTime() + 24 * 60 * 60 * 1000 - 1; return checkTime >= startTime && checkTime <= endTime; }) } // 遍历日期数组得到校验结果 const checkResult = dateArray.map(date => checkDateInRanges(date, rangesArray)); console.log(checkResult); // 输出 [false, false, true]
结果解释
针对示例中的输入:
2018-05-04T00:00:00+01:00早于所有区间开始时间,返回false2019-04-20T00:00:00+01:00早于第二个区间的开始时间2019-09-01,返回false2020-05-29T00:00:00+01:00落在第二个区间[2019-09-01, 2020-09-01]范围内,返回true
内容的提问来源于stack exchange,提问作者AndSzy
相关产品推荐
相关产品推荐

