0

2 つの日付間の日数の差を計算しようとしています。異常な動作が発生しています。以下に示すように、2013 年 10 月 6 日と 7 日に絞り込みました。日付範囲がこれらの日付にまたがる場合は常に、計算は 1 日になります。

// WRONG! current year - 2013
$datediff = strtotime('2013-10-07') - strtotime('2013-10-06');
$startToEndDays = floor($datediff/(60*60*24));
print_r($startToEndDays); // Outputs 0 - should output 1

// RIGHT! next year - 2014
$datediff = strtotime('2014-10-07') - strtotime('2014-10-06');
$startToEndDays = floor($datediff/(60*60*24));
print_r($startToEndDays); // Outputs 1 - correct

ここで何が問題になる可能性がありますか?

4

1 に答える 1

2

2013 年 10 月 6 日と 7 日は、オーストラリアのシドニーでサマータイムが始まる日です。したがって、これらの日付の間の時間数は (正しく) 23 と計算されます。ただし、23 時間は 1 日ではありません。

PHP 5.3 以降を使用している場合、夏時間の問題を回避するために、日付の差を日数で計算する方法は次のとおりです。

$startDate = new DateTime('2013-10-07');
$endDate = new DateTime('2013-10-06');
$interval = $startDate->diff($endDate);
$days = $interval->days;
于 2013-09-04T04:56:59.520 に答える