在PHP中添加小时数

在PHP中添加小时数,php,mysql,time,Php,Mysql,Time,我想这将是一个非常简单的问题,但我还没有找到任何解决方案 我正在用PHP和mySQL创建一个调度程序。班次有startTime和endTime,每一个都作为时间存储在mySQL中 我想将员工一周的总工作时间相加,因此我尝试: $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++){

我想这将是一个非常简单的问题,但我还没有找到任何解决方案

我正在用PHP和mySQL创建一个调度程序。班次有startTime和endTime,每一个都作为时间存储在mySQL中

我想将员工一周的总工作时间相加,因此我尝试:

$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);
    }
}
当以9:30:00开始和16:15:00结束运行时,显示“1:45”。
如果未触摸总时间(因为没有移位),则显示“7:00”。

strotime
返回Unix时间戳,即自该时间表示的历元起的秒数。因此,以秒为单位工作(并从零开始
$totalTime
)是正确的方法。如果需要小时数,则需要:
$totalTime=$totalTime/(60*60)在循环之后(除以3600秒/小时)。

我认为这就是您想要做的:

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

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

或者您可以使用两个
DateTime
对象和
diff()
方法,如我的博客文章中所述

它产生了什么,您测试的开始/结束值是什么?代码的结果应该以秒为单位,因此您可能需要除以3600(一小时内的秒数)才能得到小时数。您可能需要查看@JonathanKuhn,我在帖子中添加了详细信息。不过,这似乎不是一个划分问题。正如@Mike所指出的,您可以用MySQL完成所有这些。无需获取结果并让PHP计算。这在理论上是有意义的,但为什么即使$totalTime仍然等于0,它也会显示小时数?您确定
$totalTime
就是您所认为的吗?在循环后调用
date
之前打印出来。没错,我不知道我在想什么,尝试使用date格式化$totalTime。将其更改为echo$totalTime/(60*60)效果很好。
$t1 = strtotime("2013-01-01 00:00:00");
$t2 = strtotime("2013-01-15 00:00:00");

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