これについてはすでに多くの質問と回答があることは知っていますが、残念ながら私の状況は独特ではないでしょうか? 何らかの理由で、時間の変更により、1 日が計算されるよりも 1 日少なく計算されているようです。
これが私が使用していたPHPで、それぞれ夏時間の前と夏時間の後の開始日と終了日が重なり始めるまで、うまく機能していました(参考までに、これは夏時間が始まって以来の最近の問題です)この週末!):
//$lastDate and $firstDate are 2 unix timestamps with valid month, day, and year values.
//The times are irrelevant at this point, they are only meant to represent a day.
//I start by making sure these have the same time values.
$lastDate = mktime(23, 59, 59, date("m", $lastDate), date("j", $lastDate), date("Y", $lastDate));
$firstDate = mktime(23, 59, 59, date("m", $firstDate), date("j", $firstDate), date("Y", $firstDate));
//Then calculate the total number of days in between.
$totalDays = abs(floor(($firstDate - $lastDate)/(60*60*24)));
繰り返しますが、明確にするために、夏時間の変更と重複していない場合、上記は機能します...
参考のため:
PHP での 2 つの UNIX タイムスタンプ間の実際の日数
そして、私はまだPHP 5.2を使用しています。
編集/更新:
このリンクで以下を見つけました:
と
86400 (60*60*24) で除算せずに php で 2 つの UNIX タイムスタンプ間の間隔を計算する方法
//$lastDate and $firstDate are 2 unix timestamps with valid month, day, and year values.
//The times are irrelevant at this point, they are only meant to represent a day.
//I start by making sure these have the same time values.
$lastDate = mktime(10, 00, 00, date("m", $lastDate), date("j", $lastDate), date("Y", $lastDate));
$firstDate = mktime(10, 00, 00, date("m", $firstDate), date("j", $firstDate), date("Y", $firstDate));
//Then calculate the total number of days in between.
$totalDays = floor($firstDate / 86400) - floor($lastDate/ 86400);
そして、それは現在、DST のクロスオーバーで機能しているようです。誰でもこれに問題がありますか?