0

这个问题的公认答案是:计算工作日是错误的。只需检查

echo getWorkingDays("2012-01-01","2012-05-01",$holidays);

问题出在这个片段上:

$days = ($endDate - $startDate) / 86400 + 1;

所以最小的不工作的例子是:

为什么这个表达式:

($endDate - $startDate) / (60*60*24);

不是整数:

 $startDate = strtotime("2012-01-01");
 $endDate = strtotime("2012-05-01");
4

2 回答 2

3

您已超过 DST 阈值。每当您这样做时,您的持续时间(通常)会缩短或延长一小时。如果您希望避免这种情况,请专门使用 UTC。

于 2012-09-19T07:53:39.270 回答
0

正如伊格纳西奥所说,这是因为通过了夏令时的开始(三月的最后一个星期日)或结束(十月的最后一个星期日)......所以你最终失去/获得了一个小时,从而搞砸了计算。

我添加的只是等式中的 round() ,它完美地处理了这种情况:)

$days = round( (strtotime($endDate) - strtotime($startDate)) / 86400 + 1);
于 2013-02-22T17:09:03.443 回答