2010-01-26 201 views
7

我们运行基于2个工作日SLA的服务,因此如果请求在周一下午1点提交,则应在周三下午1点之前完成。PHP计算两个日期之间的办公时间数

因此,在数据库中,我有两个MySQL时间戳YYYY/MM/DD HH:MM:SS,并且需要一些方法来计算工作时间内两个日期之间的时间,以办公时间为上午9点至下午5点。

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

回答

0

总体而言,鉴于时间戳A和B,其中A为开始时间:

  • 确定A和B之间的天数(也有简单的方法可以做到这一点),调用此d
  • 如果时间戳B的HH:MM:SS大于或等于A,那么添加时间差H,给出D(天)+ H(时间)
  • 如果HH:MM:SS用于时间戳B小于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小时。

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

1

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

0

仅通过SQL来创建它是一件困难的事情。在MySQL时间戳之间的差异可以计算出这样...

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

...但OFC不采取任何办公时间考虑。

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

几年前,我有一个类似的问题,在那里我使用了一个后台脚本,我在其中定义了时间和假日。然后,我在计算未来时间戳的同时插入数据,这更容易,更灵活。