在PHP中添加小时数

时间:2013-02-26 23:56:51

标签: php mysql time

我认为这将是一个非常简单的问题,但我没有在任何地方找到解决方案。

我正在PHP和mySQL中创建一个调度程序。这些转换有一个startTime和endTime,每个都在mySQL中存储为TIME。

我想在一周内计算一名员工的总工作时数,所以我尝试了:

$shifts = [...] //shifts for the week
$totalTime = 0; //I've also tried "0:0:0" and strtotime("0:00:00");

for($d = 0; $d < 7; $d++){
    $start = strtotime($shift_types[$shifts[$d]]['ShiftType']['start_time']);
    $end = strtotime($shift_types[$shifts[$d]]['ShiftType']['end_time']);
    echo date("g:ia", $start) . ' / ' . date("g:i a", $end); 
    $totalTime += ($end-$start);
    }
}

问题在于,$ totalTime没有达到任何合理的数字。我认为这是因为PHP将$ totalTime视为自1970年以来的时间戳,这将导致完全不同的东西。我真正想要的只是净小时值,它不需要与之相关的任何日期值。

我应该提一下,我用

显示总时间
echo date("g:i", $totalTime);

当它以9:30:00的开始和16:15:00的结束运行时,它显示“1:45”。 如果未触及总时间(因为没有班次),则显示“7:00”。

2 个答案:

答案 0 :(得分:0)

strtotime返回一个Unix时间戳,即自该时间代表的纪元以来的秒数。所以使用秒(并在零开始$totalTime)是正确的方法。如果你想要小时数,你需要:循环后$totalTime = $totalTime / (60 * 60);(除以3600秒/小时)。

答案 1 :(得分:0)

我认为这可以做你想做的事情:

$t1 = strtotime("2013-01-01 00:00:00");
$t2 = strtotime("2013-01-15 00:00:00");

echo round(($t2-$t1)/3600) ." hours". PHP_EOL;

或者您可以使用我的博文http://webmonkeyuk.wordpress.com/2011/05/04/working-with-date-and-time-in-php/

中描述的两个DateTime对象和diff()方法