如何高效判断两个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
相关产品推荐
相关产品推荐

