我正在尝试创建一个能够计算出2次之间时差的函数,但只包含工作时间。 这是一个跟踪工作完成所需时间的项目。
工作时间是周一至周五上午9点至下午5点。
答案 0 :(得分:1)
这可能有点压倒性,但在链接@Amine Matmati为您提供了所需的所有工具。有了它,您可以轻松地从开始时间戳到现在每天走过,并跳过周末和下班时间。
它有点笨重,但它会起作用。
strtotime(str, timestamp)
使用一个几乎是普通英语的命令字符串,如果需要,还可以使用参考时间戳。这是您从当前时间戳一直运行到结束时间戳的过程。
即。 strtotime('end of the working day', timestamp of when the job started);
[NB:'当天结束'不是一个可接受的字符串,请查看底部的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的链接:Time difference between 2 dates ignoring weekend time
PHP date():http://php.net/manual/en/function.date.php
PHP strtotime():http://www.php.net/manual/en/function.strtotime.php
快乐的编码!