You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:09:29