PHP中如何将时长与已有日期时间(datetime)相加?
解决PHP中日期时间加时长的问题
嘿,我来帮你搞定这个时间相加的问题~你之前尝试的代码有个小问题:strtotime($hours)会把02:25:10解析成当天的这个具体时间点的时间戳,而不是你需要的“2小时25分10秒”的时长秒数,所以直接相加肯定得不到正确结果。
下面给你两种可靠的实现方式:
方法一:用DateTime + DateInterval(推荐)
这是PHP处理时间操作最规范、最健壮的方式,能自动处理跨天、跨月甚至闰年等边界情况,代码可读性也高:
<?php $dateStr = '2018-03-26 11:20:35'; $durationStr = '02:25:10'; // 将原始日期转为DateTime对象 $date = new DateTime($dateStr); // 将时长字符串转为DateInterval对象 // 这里用createFromFormat适配你的"H:i:s"格式 $duration = DateInterval::createFromFormat('H:i:s', $durationStr); // 给日期加上时长 $date->add($duration); // 输出格式化后的结果 echo $date->format('Y-m-d H:i:s'); // 输出:2018-03-26 13:45:45 ?>
方法二:手动转换时长为秒数后相加
如果你喜欢更直观的数值计算方式,可以把时长拆成小时、分钟、秒,计算总秒数后和日期的时间戳相加:
<?php $dateStr = '2018-03-26 11:20:35'; $durationStr = '02:25:10'; // 把日期转为时间戳 $dateTimestamp = strtotime($dateStr); // 拆分时长字符串,计算总秒数 list($hours, $minutes, $seconds) = explode(':', $durationStr); $totalDurationSeconds = $hours * 3600 + $minutes * 60 + $seconds; // 相加后转回日期格式 $newTimestamp = $dateTimestamp + $totalDurationSeconds; echo date('Y-m-d H:i:s', $newTimestamp); // 同样输出:2018-03-26 13:45:45 ?>
两种方法都能得到你想要的结果,个人更推荐第一种,因为它对复杂时间场景的兼容性更好,后续如果时长格式扩展(比如加上天数),调整起来也更方便。
内容的提问来源于stack exchange,提问作者Chinmay235
相关产品推荐
相关产品推荐

