1

これについてはすでに多くの質問と回答があることは知っていますが、残念ながら私の状況は独特ではないでしょうか? 何らかの理由で、時間の変更により、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)));

繰り返しますが、明確にするために、夏時間の変更と重複していない場合、上記は機能します...

参考のため:

指定された2つの日付の間の日付を見つける方法は?

PHP での 2 つの UNIX タイムスタンプ間の実際の日数

PHPで2つのUNIXタイムスタンプの間の日を見つける

そして、私はまだPHP 5.2を使用しています。

編集/更新:
このリンクで以下を見つけました:

指定された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 のクロスオーバーで機能しているようです。誰でもこれに問題がありますか?

4

1 に答える 1

2

PHP 5.3+ で実行していますか? ADateIntervalは問題にうまく適合します。
http://www.php.net/manual/en/datetime.diff.php

<?php
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');
于 2013-03-08T20:14:41.860 に答える