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

