如何在PHP中比较日期时间区间并判断当前时间所处状态
嘿,我瞅了下你这段判断时间区间的代码,发现有个逻辑小bug哦!咱们来把它理顺:
修正后的时间区间判断逻辑
首先得明确咱们要区分的三个核心状态:
- 未来:当前时间还没到区间的开始点(datetime1)
- 现在:当前时间正好处在datetime1到datetime2的区间里(包含两端)
- 过去:当前时间已经超过了区间的结束点(datetime2)
对应的正确代码应该是这样:
$current_time = new DateTime(); $datetime1 = new DateTime('2018-03-17 18:25:00'); // 区间起始时间 $datetime2 = new DateTime('2018-03-17 20:00:00'); // 区间结束时间 if ($current_time >= $datetime1 && $current_time <= $datetime2) { // 处于区间内:现在 echo "当前正处于目标时间区间内"; } elseif ($current_time > $datetime2) { // 超过区间结束:过去 echo "目标时间区间已经结束"; } else { // 剩下的情况必然是早于区间开始:未来 echo "目标时间区间尚未开始"; }
为啥要这么调整?
原代码里的第二个elseif($current_time >= $datetime1)会把「当前时间晚于datetime2」的情况也错误归到“past”分支,但这时候其实区间已经完全结束了,和“处于区间内”的判断逻辑重叠冲突。最后用else兜底更简洁,排除前两种情况后,剩下的肯定是当前时间还没到区间开始的情况,不用再重复写判断条件啦。
另外给你个小提示:如果你的业务需求是区间左闭右开(比如包含datetime1但不包含datetime2),只需要把中间的判断改成$current_time >= $datetime1 && $current_time < $datetime2就行,灵活调整~
内容的提问来源于stack exchange,提问作者scriptingtime
相关产品推荐
相关产品推荐

