PHP用于计算两个日期之间的办公时间

时间:2010-01-26 10:51:44

标签: php time

我们运行的服务基于2个工作日的SLA,因此如果请求在星期一下午1点提交,则应在星期三下午1点之前完成。

所以在数据库中我有两个MySQL时间戳YYYY / MM / DD HH:MM:SS,需要一些方法计算两个日期之间的工作时间,基于上午9点到下午5点的办公时间。 / p>

任何人都可以给我任何想法吗?

3 个答案:

答案 0 :(得分:1)

最简单的方法是将表存储到数据库中,每天使用一行,包含当天可用的工作时间。这使您可以以高粒度处理假期和周末,并且您可以通过在用户指定的两个日期之间的天数运行总和来获得可用的时间量。

答案 1 :(得分:0)

一般而言,给定时间戳A和B,其中A是开始时间:

  • 确定A和B之间的天数(有简单的方法),请调用此D
  • 如果时间戳B的HH:MM:SS大于或等于A,则加上时差H,给出D(天)+ H(时间)
  • 如果时间戳B的HH:MM:SS小于A的值,则从D中减去1并加上8小时减去时间差H,给出D-1(天)+8(小时)-H

在你的例子中,如果A是星期一下午1点,B是星期三下午1点,那么D是2.由于时间相同,H是0,因此总差异是2个工作日。

如果B是星期三下午3点,那么总差异将是2天加上2小时。

如果B是星期三上午9点,那么总差异将是1天加4小时。

上述方法不处理周末或假日,因此您必须进行适当的修改。

答案 2 :(得分:0)

仅通过SQL创建这个很难。在MySQL中,时间戳之间的差异可以这样计算......

SELECT TIMESTAMPDIFF(HOUR,T.ts2,T.ts1) 
FROM test AS T;

...但是那个ofc不需要考虑任何办公时间。

请记住,SQL 不知道你的办公时间,那些也可以依赖其他因素(周末,银行假日或其他)。为了完成这项工作,您必须首先设置一个日历表,然后开始计算。

几年前我遇到过类似的问题,在那里我使用后端脚本来定义时间和假期。然后我在第一时间插入数据时计算了未来的时间戳,这样更容易,更灵活。