什么是减少"下班后的最佳方法"从日期范围开始的时间,以获得准确的"活跃的"时间?

时间:2014-12-12 18:22:07

标签: php mysql date datetime time

我有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解决方案?

提前致谢!

0 个答案:

没有答案