2013-05-01 68 views
0

我有一个DateTime()对象的数组,我存储了一些持续时间(如“H:i”) 如何求和这个数组中的所有元素来获得总持续时间?在DateTime()对象中求和的时间

而且还应该考虑到,如果总的持续时间比23:59更重要,我必须能够得到天数。

这是可能的吗?

我试图做这样的:

$duration = new DateTime('00:00'); 

foreach($routes as $route) { 
    $arrival_time = new DateTime(); 
    $arrival_time->setTimestamp($route->arrival_time); 

    $departure_time = new DateTime(); 
    $departure_time->setTimestamp($route->departure_time); 

    $leg_duration = $arrival_time->diff($departure_time); 
    $duration->add($leg_duration); 
} 

$duration我得到了错误的时间。

附:

使用$duration->add($leg_duration);我从"24:00"时间中扣除了,为什么? 例如,如果$leg_duration = new DateTime('02:10');结果将是"21:50"

$duration->sub($leg_duration);添加时间"24:00"

这是正确的?

+0

是,尝试并张贴在这里的代码中发现如果遇到问题 – Ejaz 2013-05-01 15:24:08

+3

您的意思是DateInterval对象?总结DateTime对象没有任何意义 – 2013-05-01 15:26:31

+0

@Ejay完成了,现在轮到你了。 – Yekver 2013-05-01 15:31:00

回答

1

关于问题的一部分:您正在使用的倒方式diff()方法,代码实际上应该是:

$leg_duration = $departure_time->diff($arrival_time); 

因为在你的代码中的计算$ DEPARTURE_TIME - $ ARRIVAL_TIME(这是负面的,因此给你这个“反转”的结果)。

关于添加时间间隔的,作为一个DateTime对象包含日期也一样,你可能需要做这样的事情得到一个有意义的结果:

$start = new DateTime('00:00'); 
$duration = $start; 

// ... your loop ... 

$total = $start->diff($duration); 

$total将是一个DateInterval对象,其字段应该包含你的总时差(尽管我没有测试这个)。

0
echo sum_the_time('01:45:22', '17:27:03'); 

这会给你一个结果:

19:12:2

function sum_the_time($time1, $time2) { 
    $times = array($time1, $time2); 
    $seconds = 0; 
    foreach ($times as $time) 
    { 
    list($hour,$minute,$second) = explode(':', $time); 
    $seconds += $hour*3600; 
    $seconds += $minute*60; 
    $seconds += $second; 
    } 
    $hours = floor($seconds/3600); 
    $seconds -= $hours*3600; 
    $minutes = floor($seconds/60); 
    $seconds -= $minutes*60; 
    // return "{$hours}:{$minutes}:{$seconds}"; 
    return sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds); // Thanks to Patrick 
} 

我从here

相关问题