如果小时数大于24,则两个时间戳之间的差异

时间:2014-06-11 13:01:05

标签: php date timestamp strtotime mktime

我只是编辑我的问题 我有两种时间格式我想要它们之间的区别

例如      

 $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中抛出

有没有其他方法或我可以编辑相同我已经尝试了很多,但没有找到解决方案 我只想使用任何方法进行差异 感谢

3 个答案:

答案 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) . ':' .