计算总小时数,最佳解决方案?

时间:2013-04-09 14:59:39

标签: php datetime

我正在创建一个包含条目的表,其中包含签入,签出和说明。签入和签出都是日期时间字段。

我想计算项目的总工作时间。 这是我在1次结账和签到之间的计算:

{? $checkin = new DateTime($hour->checkin) ?}
{? $checkout = new DateTime($hour->checkout) ?}
@if($hour->checkout == '0000-00-00 00:00:00')
    {? $checkout = new DateTime() ?}
@endif
{? $diff = $checkout->diff($checkin) ?}
{? $hours = $diff->format('%H:%I') ?}

现在,我用这个来计算总秒数:

$totaltime += strtotime("January 1, 1970 " . $hours . ":00")

然后在显示所有内容后,我计算了 HOURS 的数量:

public static function format_time($seconds,$separator=':', $format = "%02d%s%02d") // t = seconds, f = separator 
    {
        return sprintf($format, floor($seconds/3600), $separator, ($seconds/60)%60, $separator, $seconds%60);
    }

然而,当我这样做时: -

strtotime("January 1, 1970 00:40:00")

我得到一个负面的int。我做错了什么?

1 个答案:

答案 0 :(得分:1)

<?php
$checkin[0] = "2013-03-09 10:00:01";
$checkout[0] = "2013-03-12 10:55:15";

$checkin[1] = "2013-03-15 10:00:01";
$checkout[1] = "2013-03-15 10:55:15";

$checkin[2] = "2013-04-09 10:00:01";
$checkout[2] = "2013-04-15 10:55:15";

$diffSeconds = 0;
for($i = 0; $i < count($checkin)-1; $i++){
  $diffSeconds += strtotime($checkout[$i]) - strtotime($checkin[$i]);
}
$hours = floor($diffSeconds/3600);
echo $hours.' hours';
?>