PHP中strtotime跨午夜添加时间返回错误结果的问题求助
问题分析与解决
你遇到的问题根源在于date函数的格式符使用错误:
你当前的代码用了h:i:s格式,其中h代表12小时制的小时数(范围1-12),所以当时间走到次日00:30时,12小时制下会显示为12:30(AM),这就是你看到异常结果的原因。
而DateTime类的代码里用了H:i:s,H是24小时制的小时数(范围00-23),所以能正确显示00:30。
修正后的strtotime代码
把格式符里的h换成H即可得到正确结果:
echo date("Y-m-d H:i:s", strtotime("2024-11-26 23:30:00 +3600 seconds"));
执行这段代码会输出2024-11-27 00:30:00,符合预期。
补充说明
strtotime本身的时间计算是正确的,错误出在最终的格式化环节。12小时制的h会把0点转换为12,而24小时制的H会保留00的显示。这个行为不是PHP版本更新导致的,是date函数格式符的标准规则,一直存在。
内容的提问来源于stack exchange,提问作者Steve Garrett
相关产品推荐
相关产品推荐

