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

PHP中计算两个时间字符串差值求助:strtotime返回错误值

解决PHP时间字符串差值计算问题

嘿,我来帮你搞定这个时间差计算的坑!你遇到的问题大概率是strtotime对这种日期和时间用横杠分隔的格式解析出了歧义——毕竟strtotime依赖系统默认的日期规则,对于非标准分隔符容易“懵圈”。

给你两种靠谱的解决方案,任选其一就行:

方案一:用DateTime类(推荐,更稳定)

DateTime类可以明确指定解析格式,完全避免解析错误,步骤如下:

// 定义你的两个时间字符串
$timeStr1 = "2018/04/10-14:54:55";
$timeStr2 = "2018/04/10-14:56:10";

// 按照指定格式解析时间
$dt1 = DateTime::createFromFormat('Y/m/d-H:i:s', $timeStr1);
$dt2 = DateTime::createFromFormat('Y/m/d-H:i:s', $timeStr2);

// 计算时间差,得到DateInterval对象
$timeDiff = $dt2->diff($dt1);

// 按需输出结果:比如总秒数
$totalSeconds = $timeDiff->s + $timeDiff->i * 60 + $timeDiff->h * 3600;
echo "总时间差:{$totalSeconds} 秒"; // 这里会输出75秒,对应1分15秒

// 或者输出可读性更强的格式
echo "时间差:" . $timeDiff->format('%H小时 %i分钟 %s秒');

方案二:修复格式后用strtotime

如果一定要用strtotime,可以先把日期和时间之间的横杠替换成空格,变成PHP能正确识别的格式:

// 替换分隔符,把横杠换成空格
$formattedTime1 = str_replace('-', ' ', "2018/04/10-14:54:55");
$formattedTime2 = str_replace('-', ' ', "2018/04/10-14:56:10");

// 转换为时间戳并计算差值
$timestamp1 = strtotime($formattedTime1);
$timestamp2 = strtotime($formattedTime2);
$diffSeconds = $timestamp2 - $timestamp1;

echo "总时间差:{$diffSeconds} 秒"; // 同样得到75秒

两种方法都能得到正确的结果,个人更推荐第一种,因为DateTime类在处理复杂或非标准时间格式时,稳定性和可读性都更强~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:31:53