这可能有点压倒性,但在链接中@Amine Matmati 提供了您需要的所有工具。有了它,您可以轻松地浏览从开始时间戳到现在的每一天,并跳过周末和下班时间。
这有点笨拙,但它会工作。
strtotime(str, timestamp)
接受一个字符串,该字符串几乎是简单的英语命令,如果需要,还需要一个参考时间戳。这就是您从当前时间戳一直运行到结束时间戳的方式。
IE。strtotime('end of the working day', timestamp of when the job started);
[注意:'end of the day' 不是一个可接受的字符串,请查看底部 PHP 手册的链接,我只是想让你看看它对你有什么用处]
因此,如果您构建了一个从原始时间戳到现在的循环,您可以计算您所走的工作小时数。
我将向您展示伪代码中的逻辑:
$Present is present timestamp;
$Start is the starting timestamp;
$Hours will be the accumulated working hours between starting timestamp and present timestamp;
loop while present timestamp not reached {
if $Start does not occur on the same day as $Present{
if $Start occurs inside of working hours {
find the time to the end of the working day;
add that time to $Hours;
}
find next day;
if the next day is Saturday{
update $Start to the working start of next Monday;
}
else{
update $Start to the working start of the next day;
}
}
else{
find the time between $Start and $Present;
add that time to $Hours;
update $Start to $Present or Break;
}
}
它确实假设开始时间不会出现在周末,并且不会出现在与当前时间戳同一天的工作时间之外(即之前),但控制这些非常容易。
在这方面将成为您朋友的事情是:
@Amine Matmati 的链接:忽略周末时间的两个日期之间的时差
PHP 日期():http://php.net/manual/en/function.date.php
PHP strtotime():http ://www.php.net/manual/en/function.strtotime.php
快乐编码!