我有2个包含mysql时间戳的并行数组。第一个数组包含“开始”时间,第二个数组包含“停止”时间。
示例
Starts
Array ( [0] => 2014-12-05 12:21:29 [1] => 2014-12-10 07:14:17 [2] => 2014-12-10 12:43:47 [3] => 2014-12-12 07:39:28 [4] => 2014-12-12 08:13:30 )
Stops
Array ( [0] => 2014-12-08 08:08:37 [1] => 2014-12-10 10:13:37 [2] => 2014-12-12 07:18:53 [3] => 2014-12-12 08:10:39 [4] => 2014-12-12 08:27:26 )
我需要根据每个阵列中的所有开始和停止添加总时间,但我还需要减去“非工作时间”的所有时间。这是出于报告目的。
因此,我们可以说,在下午4点(16:00)之后和早上6点(06:00)之间的任何时间都需要从将要报告的总活动时间中删除。
我已经减去了周末时间,但如果它在工作日的下班后发生,我还需要它来删除“下班后”时间。工作日/周末的检查不是问题,但是弄清楚如何检查时间范围是否包含营业时间之后的小时数,这是令我感到困惑的。
以下是我减去周末时间的方法:
function getWeekendSeconds($starts, $stops){
$count = 0;
$secondsToSubtract = 0;
$secondsInDay = 86400;
if(count($starts) > count($stops)){
while(count($starts) != count($stops)){
array_pop($starts);
}
}
foreach($starts as $start){
$stop = $stops[$count];
$startTime = strtotime($start);
$stopTime = strtotime($stop);
while($startTime < $stopTime){
$dayNum = date('N', strtotime(date("Y-m-d H:i:s", $startTime)));
if($dayNum == 6 or $dayNum == 7){
$secondsToSubtract += $secondsInDay;
}
$startTime = strtotime(date("Y-m-d H:i:s", $startTime) . " +1 day");
}
$count = $count + 1;
}
return $secondsToSubtract;
}
我正在考虑做一些类似于计算下班后时间的事情,但是我无法绕过它。
我是否只需占用开始时间并为其增加时间并每次检查一次,看它是否大于营业时间?它比我做的更简单吗?有没有我不知道的mysql解决方案?
提前致谢!