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 のしきい値を超えました。そうするたびに、持続時間は (通常) 1 時間短くなったり長くなったりします。これを避けたい場合は、UTC のみを使用してください。

于 2012-09-19T07:53:39.270 に答える
0

Ignacio が言うように、それは夏時間の開始 (3 月の最後の日曜日) または終了 (10 月の最後の日曜日) を過ぎているためです。

私が追加したのは、式に round() だけで、状況を完全に処理します:)

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