PHP - 仅使用工作时间的日期/时间差异

时间:2013-02-19 13:38:53

标签: php time timestamp datediff hour

我正在尝试创建一个能够计算出2次之间时差的函数,但只包含工作时间。 这是一个跟踪工作完成所需时间的项目。

工作时间是周一至周五上午9点至下午5点。

  • 实施例1
    如果工作在下午4:50开始,有人在第二天上午10点查看页面,计时器会说1小时10分0秒。
  • 实施例2
    如果工作在下午6:23开始,并且有人在第二天上午9:30看页面,那么计时器会说30m 0。
  • 实施例3
    如果工作在星期五下午1:20开始,有人在星期二下午4点查看页面,那么计时器将说18h 40m 0s。 (周六和周日除外!)

1 个答案:

答案 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

快乐的编码!