PHP中如何正确比较last_power与每日7点起始的时间范围?
问题:判断last_power是否处于当日7点起的有效周期外
需求与异常场景
- 核心规则:每日7点作为新周期起点,当
last_power满足以下任一条件时返回true,否则返回false:- 距离当前时间超过24小时
- 处于当前周期(当日7点至今)之外
- 正常示例:
- 当前时间
2022/12/15 14:40:40,last_power为2022/12/14 18:40:40→ 返回true - 当前时间
2022/12/15 14:40:40,last_power为2022/12/15 11:40:40→ 返回false
- 当前时间
- 异常场景:当前时间
2022/12/15 00:40:40,last_power为2022/12/14 01:40:40,预期返回true,但现有代码返回false
原代码
//set $current = time(); $new_day = strtotime('today 7:00'); $date_power = strtotime($last_power); if ($current - $date_power >= (24 * 60 * 60) || ($date_power < $new_day && $current >= $new_day)) { echo "true"; //last_result < today 7:00AM -> you award your price } else { echo "false"; //last_result > today 7:00AM -> you have already received the price for today }
问题分析
原代码的逻辑漏洞在于:当当前时间在当日00:00-6:59之间时,$new_day是当日7点,此时$current >= $new_day不成立,导致第二个条件无法触发。但这种场景下,我们应该把昨日7点作为周期起点来判断,只要last_power早于昨日7点,就应返回true。
修正后的代码
$current = time(); // 根据当前时间确定周期起点:7点前取昨日7点,7点及之后取今日7点 $cycle_start = $current < strtotime('today 7:00') ? strtotime('yesterday 7:00') : strtotime('today 7:00'); $date_power = strtotime($last_power); // 只要last_power早于周期起点,或距离当前时间超24小时,就返回true if ($date_power < $cycle_start || $current - $date_power >= 24 * 60 * 60) { echo "true"; } else { echo "false"; }
逻辑说明
- 动态确定周期起点:根据当前时间是否过7点,自动切换周期起点为昨日7点或今日7点,完美覆盖凌晨0-7点的场景
- 判断逻辑简化:只要
last_power不在当前周期内(早于周期起点),或者时间差超过24小时,就返回true,完全符合需求 - 测试异常场景:当前时间
2022/12/15 00:40:40时,周期起点为2022/12/14 7:00,last_power为2022/12/14 01:40:40早于该起点,返回true,符合预期
内容的提问来源于stack exchange,提问作者Weamar
相关产品推荐
相关产品推荐

