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

如何用原生JS正确判断日期是否过期?当前代码仅按日校验存问题

原生JS全时间维度判断日期是否过期的正确实现

原代码的问题分析

  1. 重复修改同一Date实例导致逻辑错误:setDate方法会直接修改原Date对象的时间,你先执行add_day = date.setDate(date.getDate() + 1)时,原date已变为明天的时间;再执行minus_day = date.setDate(date.getDate() - 2),实际是在明天的基础上减2天,得到的是昨天的时间戳,完全偏离了“当前日期减2天”的预期。
  2. 判断逻辑错误:代码中仅对比两个修改后的日期,而非目标日期与当前时间的关系,且过期判断条件完全写反——过期应该是目标日期早于当前时间,而非两个日期互比大小。

正确实现思路

要实现包含时分秒的全时间维度校验,核心是直接对比时间戳或Date对象本身:Date对象本质是存储从1970年1月1日00:00:00 UTC到该日期的毫秒数,对比时会自动兼顾时分秒的差异。

代码示例

修复原代码的错误写法

// 保留当前时间的原始实例
const now = new Date();

// 生成明天同一时间的独立实例(不修改原now)
const addDay = new Date(now);
addDay.setDate(now.getDate() + 1);

// 生成两天前同一时间的独立实例
const minusDay = new Date(now);
minusDay.setDate(now.getDate() - 2);

// 打印带时分秒的日期信息
console.log(addDay.toLocaleString(), '| 明天此时');
console.log(minusDay.toLocaleString(), '| 两天前此时');

// 判断minusDay是否过期(早于当前时间则过期)
if (minusDay < now) {
  console.log('minusDay 已过期');
} else {
  console.log('minusDay 未过期');
}

// 判断addDay是否过期
if (addDay < now) {
  console.log('addDay 已过期');
} else {
  console.log('addDay 未过期');
}

通用过期判断函数

// 通用函数:判断目标日期是否过期(目标日期早于当前时间则返回true)
function isDateExpired(targetDate) {
  // 处理字符串格式的日期输入
  const target = typeof targetDate === 'string' ? new Date(targetDate) : targetDate;
  
  // 校验是否为有效日期
  if (isNaN(target.getTime())) {
    throw new Error('传入的不是有效日期');
  }
  
  const now = new Date();
  // 直接对比时间戳,自动包含时分秒维度
  return target.getTime() < now.getTime();
}

// 测试用例
const twoDaysAgo = new Date();
twoDaysAgo.setDate(twoDaysAgo.getDate() - 2);
console.log(isDateExpired(twoDaysAgo)); // true(已过期)

const tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
console.log(isDateExpired(tomorrow)); // false(未过期)

console.log(isDateExpired("2020-01-01 12:00:00")); // true(已过期)

关键注意点

  • 每次创建新的Date实例:new Date(now)会复制当前时间的对象,修改新实例不会影响原时间。
  • 直接对比Date对象:<、>等运算符会自动转换为时间戳对比,无需手动提取时分秒。
  • 校验日期有效性:通过isNaN(target.getTime())排除无效日期输入,避免逻辑异常。

内容的提问来源于stack exchange,提问作者user21339222

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:43:00