我只是编辑我的问题 我有两种时间格式我想要它们之间的区别
例如
$time1 = new DateTime('09:00:59');
$time2 = new DateTime('100:30:00');
$interval = $time1->diff($time2);
echo $interval->format('%h:%i:%s second(s)');
?>
如果我正在增加时间2,它在24小时以下的工作正常显示致命错误
$ time2 =新日期时间(' 100:30:00');
致命错误:未捕获的异常'异常' with message' DateTime :: __ construct()[datetime .-- construct]:无法解析位置0(1)处的时间字符串(100:30:00):意外字符'在D:\ xampp \ htdocs \ datetime.php:3堆栈跟踪:#0 D:\ xampp \ htdocs \ datetime.php(3):DateTime-> __ construct(' 100:30:00' )#3 {main}在第3行的D:\ xampp \ htdocs \ datetime.php中抛出
有没有其他方法或我可以编辑相同我已经尝试了很多,但没有找到解决方案 我只想使用任何方法进行差异 感谢
答案 0 :(得分:2)
一种方法:
$time2 = '100:00:00';
$time1 = '10:30:00';
list($hours, $minutes, $seconds) = explode(':', $time2);
$interval2 = $hours*3600 + $minutes*60 + $seconds;
list($hours, $minutes, $seconds) = explode(':', $time1);
$interval1 = $hours*3600 + $minutes*60 + $seconds;
$diff = $interval2 - $interval1;
echo floor($diff / 3600) . ':' .
str_pad(floor($diff / 60) % 60, 2, '0') . ':' .
str_pad($diff % 60, 2, '0');
输出:
89:30:00
这是 Codepad 演示
答案 1 :(得分:1)
我希望这可能有所帮助。
$time1 = '10:30:00';
$time2 = '100:00:00';
function hms2sec ($hms) {
list($h, $m, $s) = explode (":", $hms);
$seconds = 0;
$seconds += (intval($h) * 3600);
$seconds += (intval($m) * 60);
$seconds += (intval($s));
return $seconds;
}
$ts1=hms2sec($time2);
$ts2=hms2sec($time1);
$time_diff = $ts1-$ts2;
function seconds($seconds) {
// CONVERT TO HH:MM:SS
$hours = floor($seconds/3600);
$remainder_1 = ($seconds % 3600);
$minutes = floor($remainder_1 / 60);
$seconds = ($remainder_1 % 60);
// PREP THE VALUES
if(strlen($hours) == 1) {
$hours = "0".$hours;
}
if(strlen($minutes) == 1) {
$minutes = "0".$minutes;
}
if(strlen($seconds) == 1) {
$seconds = "0".$seconds;
}
return $hours.":".$minutes.":".$seconds;
}
echo $final_diff=seconds($time_diff);
答案 2 :(得分:0)
由于我的“声誉”不足,无法在所选答案中添加评论。我想添加一条消息以指出它的缺陷。
如果您尝试使用以下参数:
$time2 = '10:15:00';
$time1 = '10:10:00';
您将得到以下错误结果: 0:50:00
要解决此问题,您需要在处理分钟的str_pad中添加STR_PAD_LEFT,如下所示:
str_pad(floor($diff / 60) % 60, 2, '0', STR_PAD_LEFT) . ':' .