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

PHP如何比较两个时间?数据库时间与当前时间对比全部返回false排查

问题原因

  • 核心错误:数组结构异常:你定义的$data[] = array();是二维数组结构,如果后续往$data中插入数据时错误塞入了数组而非直接插入时间字符串,遍历的时候拿到的$val就是数组而非H:i格式的字符串,拼接后的时间会变成Y-m-d Array,strtotime()解析失败返回false。PHP中false和数字对比时会被转为0,小于任何正常的时间戳,所以所有对比结果都是false。
  • var_dump()使用错误:var_dump()是直接打印输出的函数,没有返回值,你把它写在echo语句中会导致输出顺序错乱(布尔值先打印,再打印时间字符串),干扰你对实际对比结果的判断。
  • 时区未显式配置:PHP默认时区如果和你所在的时区不一致,会导致date()获取的当前时间和实际本地时间存在时差,导致对比逻辑不符合预期。

修正方案

首先确认你的$data是一维数组,每个元素直接是H:i格式的时间字符串,正确的数组赋值示例:$data[] = '00:05'; 而非$data[] = ['00:05'];。

修正后的代码如下:

// 先配置对应时区,国内使用Asia/Shanghai即可
date_default_timezone_set('Asia/Shanghai');

// 直接取当前时间戳,不需要转字符串再解析,性能更高
$timenow = time(); 

foreach($data as $key=>$val){
    // 去除时间字符串前后多余空格
    $val = trim($val);
    // 校验时间格式是否合法
    if (!preg_match('/^\d{2}:\d{2}$/', $val)) {
        echo "无效的时间格式:" . var_export($val, true) . "<hr />";
        continue;
    }
    $time = strtotime(date("Y-m-d") . " " . $val);
    
    // 可选业务逻辑:如果当天的时间已经小于当前时间,自动加1天顺延到次日,根据自身需求决定是否开启
    // if ($time < $timenow) {
    //     $time += 86400;
    // }

    $res = $time >= $timenow;
    // 使用var_export的返回值模式,保证输出顺序正确
    echo date("Y-m-d H:i", $time) . " >= " . date("Y-m-d H:i", $timenow) . " " . var_export($res, true) . "<hr />";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 07:24:03