Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 日期时间“;“差别”;_Php_Datetime - Fatal编程技术网

Php 日期时间“;“差别”;

Php 日期时间“;“差别”;,php,datetime,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

我认为时间物体就是一团乱。我真的不知道它们是怎么工作的。
我有一个包含数据的数组: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 diff来计算时间:

$break_1_dur = $break_1_start->diff($break_1_ends);
我已经尝试使用以下命令创建“DateTime”字符串:

$break_1_start = new DateTime();

如何以简单的方式计算此值?

这应该适用于您:

在这里,我首先将您的阵列拆分为以下结构:

I循环所有
$次
,通过创建对象计算差异,并通过以下方式获得差异:


@Mjukis不客气!希望我使DateTime类更容易理解和使用:D(它没有那么复杂)
Array
(
    [skift_rast1] => Array
        (
            [start] => 09:00
            [end] => 09:20
        )

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

)
<?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