如何为Date.now()与预定义日期设置相等判断条件?
现有逻辑问题说明
你当前的代码存在两个核心问题:
- 类型不匹配:
new Date(visitationDate)返回的是Date对象,Date.now()返回的是毫秒级时间戳数字,直接用==比较永远不会成立,需要先把Date对象转成时间戳再比较 - 触发概率极低:要求两个时间精确到毫秒完全相等,几乎不可能正常触发Condition1
实现方案
你可以根据自己的业务需求选择以下任意一种实现:
方案1:按「当前自然日」规则判断
规则:忽略时分秒,只要visitationDate属于当前自然日且不早于当前时间,就触发Condition1
const visitTs = new Date(visitationDate).getTime(); const nowTs = Date.now(); // 小于当前时间直接走Condition2 if (visitTs < nowTs) { // 执行Condition2 } else { // 计算当日0点和23:59:59.999的时间戳(默认UTC时区,需要按当地时区可以自行调整逻辑) const todayStartTs = new Date(new Date().toISOString().split('T')[0]).getTime(); const todayEndTs = todayStartTs + 24 * 60 * 60 * 1000 - 1; if (visitTs <= todayEndTs) { // 执行Condition1 } else { // 执行Condition2 } }
方案2:按「24小时滑动窗口」规则判断
规则:只要visitationDate落在当前时间往后24小时的区间内,就触发Condition1
const visitTs = new Date(visitationDate).getTime(); const nowTs = Date.now(); const oneDayLaterTs = nowTs + 24 * 60 * 60 * 1000; if (visitTs < nowTs || visitTs > oneDayLaterTs) { // 执行Condition2 } else { // 执行Condition1 }
补充说明
如果业务需要按用户所在时区判断自然日,可以直接取消前端的格式转换操作,后端可以正常解析前端传的原始带时区的日期字符串,不会出现时区偏移问题。
内容的提问来源于stack exchange,提问作者Jetro Olowole
相关产品推荐
相关产品推荐

