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

PHP中预估时间与固定时间对比的代码问题排查

问题分析与解决方案

嘿,这个小坑我之前也踩过!你的代码没法正常工作的核心原因很明确,咱们一步步拆解:

1. 最直接的错误:用了赋值运算符而非比较运算符

你写的if ($dateTime = $dateTime1)里,=是赋值运算符——它的作用是把$dateTime1的值塞给$dateTime,然后这个表达式的结果就是被赋的值(也就是"05:00 AM")。因为这个值是非空字符串,所以条件永远会判定为true,导致你的else分支根本没机会执行。

你需要把它改成比较运算符:

  • ==:松散比较,只判断值是否相等
  • ===:严格比较,同时判断值和类型是否相等(更推荐,能避免隐式类型转换的坑)

修正后的字符串比较代码:

$dateTime = new DateTime('now', new DateTimeZone('America/New_York'));
$currentTime = $dateTime->format("H:i A");
echo $currentTime . "\n";

$dateTime1 = "05:00 AM";

if ($currentTime === $dateTime1) {
    echo "\nGood";
} else {
    echo "\nBad";
}

2. 更严谨的优化方案:用DateTime对象直接对比

直接比较字符串虽然能解决问题,但如果后续不小心改了format的参数(比如把H:i A改成h:i a),很容易再次出错。更好的方式是把固定时间也转换成DateTime对象,然后直接对比两个对象:

$now = new DateTime('now', new DateTimeZone('America/New_York'));
echo $now->format("H:i A") . "\n";

// 把固定时间转换成同时区的DateTime对象
$targetTime = new DateTime('05:00 AM', new DateTimeZone('America/New_York'));

// 直接对比两个DateTime对象
if ($now == $targetTime) {
    echo "\nGood";
} else {
    echo "\nBad";
}

这种方式的好处是:

  • 不需要担心字符串格式不一致的问题
  • 后续可以灵活扩展逻辑(比如判断当前时间是否在某个时间段内,用diff方法计算时间差等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:49:43