我认为这将是一个非常简单的问题,但我没有在任何地方找到解决方案。
我正在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”。
答案 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()
方法