如何判断日期是否为两天及以上之前的过去日期(排除未来)
修复PHP日期判断逻辑:仅识别两天及以上之前的过去日期
你的代码问题出在DateTime::diff()返回的%a格式是绝对值天数——不管目标日期是在过去还是未来,它只会返回正数的天数差。这就导致未来日期只要和今天间隔≥2天,也会错误返回true。
要解决这个问题,我们需要同时满足两个条件:
- 目标日期是过去的日期(早于今天)
- 日期间隔≥2天
这里有两种简洁的修复方案:
方案1:先判断日期先后,再计算间隔天数
直接通过DateTime对象的比较运算符判断目标日期是否在今天之前,再检查天数差:
$d = new DateTime('04-06-2018'); $todayDate = new DateTime(); // 先确认目标日期是过去的日期 if ($d < $todayDate) { $interval = $d->diff($todayDate); $days = $interval->format('%a'); echo $days >= 2 ? 'true' : 'false'; } else { // 未来日期或当天,直接返回false echo 'false'; }
方案2:利用DateInterval的invert属性
diff()返回的DateInterval对象有个invert属性:
- 当目标日期早于当前日期时,
invert = 0 - 当目标日期晚于当前日期时,
invert = 1
我们可以结合这个属性直接判断:
$d = new DateTime('04-06-2018'); $todayDate = new DateTime(); $interval = $d->diff($todayDate); // 同时满足:是过去日期 + 间隔≥2天 if ($interval->invert === 0 && $interval->format('%a') >= 2) { echo 'true'; } else { echo 'false'; }
两种方案都能准确过滤掉未来日期的情况,比如测试明天的日期会返回false,3天前的日期返回true,1天前的日期返回false,完全符合你的需求。
内容的提问来源于stack exchange,提问作者user9544660
相关产品推荐
相关产品推荐

