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

PHP中如何正确比较last_power与每日7点起始的时间范围?

问题:判断last_power是否处于当日7点起的有效周期外

需求与异常场景

  • 核心规则:每日7点作为新周期起点,当last_power满足以下任一条件时返回true,否则返回false:
    1. 距离当前时间超过24小时
    2. 处于当前周期(当日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";
}

逻辑说明

  1. 动态确定周期起点:根据当前时间是否过7点,自动切换周期起点为昨日7点或今日7点,完美覆盖凌晨0-7点的场景
  2. 判断逻辑简化:只要last_power不在当前周期内(早于周期起点),或者时间差超过24小时,就返回true,完全符合需求
  3. 测试异常场景:当前时间2022/12/15 00:40:40时,周期起点为2022/12/14 7:00,last_power为2022/12/14 01:40:40早于该起点,返回true,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:40:44