0

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

我正在用 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”。

4

2 回答 2

0

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

于 2013-02-27T00:02:10.327 回答
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()

于 2013-02-27T00:06:26.157 回答