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

如何高效判断两个YYYY-MM-DD格式的日期是否相差不超过2天?

判断两个日期相差不超过2天的高效实现方法

你提供的代码存在两个问题:一是setDate会直接修改原startDate对象,可能影响后续对该对象的使用;二是+3的计算逻辑错误——要判断相差不超过2天,应该给start加2天,而非3天。

下面是两种高效的实现方式,按需选择:

方法一:时间戳差值对比(最简洁高效)

利用YYYY-MM-DD格式可直接被Date解析的特性,将日期转成时间戳后计算差值,和2天对应的毫秒数(2×24×60×60×1000=172800000)对比,取绝对值就能同时覆盖finish在start之前或之后的情况:

const start = '2024-06-11';
const finish = '2024-06-13';

const startTs = new Date(start).getTime();
const finishTs = new Date(finish).getTime();

const maxAllowedDiff = 2 * 24 * 60 * 60 * 1000;
const isWithinTwoDays = Math.abs(finishTs - startTs) <= maxAllowedDiff;

console.log(isWithinTwoDays); // 输出 true

方法二:日期区间判断(可读性强)

如果倾向于用日期对象的方法实现,注意要创建新的日期对象,避免修改原数据,同时判断finish是否落在start前后2天的区间内:

const start = '2024-06-11';
const finish = '2024-06-13';

const startDate = new Date(start);
const finishDate = new Date(finish);

// 生成start加2天的日期(不修改原startDate)
const startPlusTwo = new Date(startDate);
startPlusTwo.setDate(startPlusTwo.getDate() + 2);

// 生成start减2天的日期
const startMinusTwo = new Date(startDate);
startMinusTwo.setDate(startMinusTwo.getDate() - 2);

// 判断finish是否在区间内
const isWithinTwoDays = finishDate >= startMinusTwo && finishDate <= startPlusTwo;

console.log(isWithinTwoDays); // 输出 true

两种方法里,时间戳对比的性能略优,因为直接做数值运算;但日常开发中两者的性能差异可以忽略,选可读性更高的即可。

内容的提问来源于stack exchange,提问作者B. Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:31:05