DateTime" diff"

时间:2015-04-08 11:11:42

标签: php datetime

我认为时间对象只是一团糟。我真的不知道它们是如何工作的。
我有一个包含数据的数组:09:00-09:20和12:30-13:00 现在我想计算09:00-09:20之间的时间 所以我打破阵列:

$break_1_dur = $usr_breaks['skift_rast1'];
//returns: 09:00-09:20

我打破了字符串:

$break_1_start = substr($break_1_dur,0,5);
//returns: 09:00                   

$break_1_ends = substr($break_1_dur,6,5);
//returns: 09:20

现在我将使用DateTime差异来计算时间:

$break_1_dur = $break_1_start->diff($break_1_ends);

我试图将字符串设置为" DateTime"用:

$break_1_start = new DateTime();

我怎样才能以简单的方式计算出来?

1 个答案:

答案 0 :(得分:3)

这应该适合你:

在这里,我首先使用array_map()将数组拆分为以下结构:

Array
(
    [skift_rast1] => Array
        (
            [start] => 09:00
            [end] => 09:20
        )

    [skift_rast2] => Array
        (
            [start] => 12:30
            [end] => 13:00
        )

)

I循环遍历所有$times并计算创建DateTime个对象的差异,并通过diff()获得差异:

<?php

    $usr_breaks = ["skift_rast1" => "09:00-09:20", "skift_rast2" => "12:30-13:00"];
    $times = array_map(function($v){
        return array_combine(["start", "end"], explode("-", $v));
    }, $usr_breaks);


    //print differences
    foreach($times as $time) {
        $timeOne = new DateTime($time["start"]);
        $timeTwo = new DateTime($time["end"]);
        $interval = $timeOne->diff($timeTwo);
        echo sprintf("%d hours %d minutes<br>", $interval->h , $interval->i);
    }

?>

输出:

0 hours 20 minutes
0 hours 30 minutes