如何在JavaScript中判断数组中的三个日期是否连续?
JavaScript函数判断数组中三个日期是否连续
实现思路
要判断数组中三个日期是否连续,核心步骤如下:
- 从数组对象中提取日期字段,转换为可计算的时间戳
- 对时间戳进行排序(输入数组的日期可能无序)
- 验证相邻日期的时间间隔是否恰好为1天(86400000毫秒)
函数代码
function areDatesConsecutive(userArray) { // 提取日期并转换为毫秒级时间戳 const timestamps = userArray.map(user => new Date(user.doj).getTime()); // 对时间戳按从小到大排序 timestamps.sort((a, b) => a - b); // 定义一天的毫秒数 const oneDayMs = 24 * 60 * 60 * 1000; // 计算相邻日期的间隔并判断是否均为1天 const firstDiff = timestamps[1] - timestamps[0]; const secondDiff = timestamps[2] - timestamps[1]; return firstDiff === oneDayMs && secondDiff === oneDayMs; }
测试示例
用你提供的三个数组测试函数:
// 测试连续日期(跨日) const userArr1 = [ { userid: "abc@email.com", doj: "2023-02-15T00:00:00.000Z" }, { userid: "def@email.com", doj: "2023-02-16T00:00:00.000Z" }, { userid: "pqr@email.com", doj: "2023-02-17T00:00:00.000Z" }, ]; console.log(areDatesConsecutive(userArr1)); // 输出: true // 测试不连续日期 const userArr2 = [ { userid: "abc@email.com", doj: "2023-02-10T00:00:00.000Z" }, { userid: "def@email.com", doj: "2023-02-5T00:00:00.000Z" }, { userid: "pqr@email.com", doj: "2023-02-12T00:00:00.000Z" }, ]; console.log(areDatesConsecutive(userArr2)); // 输出: false // 测试连续日期(跨月) const userArr3 = [ { userid: "abc@email.com", doj: "2023-01-31T00:00:00.000Z" }, { userid: "def@email.com", doj: "2023-02-01T00:00:00.000Z" }, { userid: "pqr@email.com", doj: "2023-02-02T00:00:00.000Z" }, ]; console.log(areDatesConsecutive(userArr3)); // 输出: true
关键说明
- 使用
getTime()将日期转换为毫秒级时间戳,避免直接操作Date对象的时区问题 - 排序步骤必不可少,因为输入数组的日期顺序可能是混乱的
- 直接比较时间戳差值,天然支持跨月、跨年的连续日期判断
内容的提问来源于stack exchange,提问作者Guru Sahoo
相关产品推荐
相关产品推荐

