从另一个DateInterval中提取DateInterval

时间:2015-05-29 19:27:30

标签: php date dateinterval

$date1 = new DateInterval('PT100S'); //100 seconds
$date2 = new DateInterval('PT20S');  //20 seconds

如何制作$date1 - $date2?我在谷歌搜索了几个小时。

2 个答案:

答案 0 :(得分:2)

使用format获取秒数,然后进行减法。

echo $date1->format('%s') - $date2->format('%s');

这是你想要的吗?

答案 1 :(得分:1)

这应该适合你:

在这里,我只使用两个DateInterval对象从定义的$keys获取array_intersect_key()。这样我就可以使用array_map()遍历两个数组并减去这些值。使用计算出的值,我创建了一个新的DateInterval对象,然后返回。

<?php

    $date1 = new DateInterval('PT100S');
    $date2 = new DateInterval('PT20S'); 

    function subtractDateIntervals($intervalOne, $intervalTwo) {
        $keys = ["y", "m", "d", "h", "i", "s"];

        $intervalArrayOne = array_intersect_key((array)$intervalOne, array_flip($keys));
        $intervalArrayTwo = array_intersect_key((array)$intervalTwo, array_flip($keys));

        $result = array_map(function($v1, $v2){
            return abs($v1 - $v2);
        }, $intervalArrayOne, $intervalArrayTwo);

        return new DateInterval(vsprintf("P%dY%dM%dDT%dH%dM%dS", $result));


    }       

    var_dump(subtractDateIntervals($date1, $date2));

?>

输出:

object(DateInterval)#3 (15) {
  //...
  ["s"]=>
  int(80)
  //...
}