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

PHP7.4下DateInterval传入2376000秒返回结果少1小时问题

问题原因

这是PHP 7.4及更早版本的DateInterval已知内核缺陷:构造函数解析以秒为单位的长时长参数时,内部将总秒数转换为日、时、分的可视化字段的逻辑存在整数运算错误,才会出现总秒数正确但拆分出的小时数少1的问题。
你可以注意到返回的DateInterval对象中s属性存储的总秒数依然是正确的2376000,该偏差仅影响d、h、i这类拆分字段的显示,不会对实际日期加减运算的结果产生影响。

可行解决方案
  • 方案1:升级PHP版本到8.0及以上,该版本已经修复了这个解析bug,相同的输入会正确返回+27d 12:00:00.0的间隔结果。
  • 方案2:如果无法升级PHP版本,避免直接依赖DateInterval的d、h、i拆分字段做时长计算,直接使用自带的s属性计算准确时长,比如获取总小时数可以用$totalHours = $interval->s / 3600。
  • 方案3:构造DateInterval前提前将大秒数手动拆分为日、时、分、秒单位,再组装为间隔规范字符串,比如2376000秒对应27天12小时,就写为:
    $interval = new DateInterval('P27DT12H');
    
    即可得到正确的拆分字段值。
  • 方案4:通过两个时间戳的差值生成DateInterval,避免直接解析大秒数字符串:
    $start = new DateTime('@0');
    $end = new DateTime('@2376000');
    $interval = $start->diff($end);
    
    该方式生成的间隔对象拆分字段完全正确,不存在偏差问题。

内容的提问来源于stack exchange,提问作者Filip Kaszczyński

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:15:03