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
相关产品推荐
相关产品推荐

