0

重複の可能性:
PHP でタイムゾーンの差の計算をどのように処理しますか?

昨日のスウェーデンの DST の変更で、作成したコードで問題が発生しました。PHP DateTime、DateTimeZone、DateTimePeriod などを使用していますが、結果に同意しません。

これらの日付の間の日数と時間数についてどう思いますか?

"Sun, 28 Oct 2012 01:00:00 +0200"
"Mon, 29 Oct 2012 00:00:00 +0100"

PHPは、0日と23時間だと言っています。0日ですが、24時間です。

更新:タイムゾーンは「ヨーロッパ/ストックホルム」であるため、両方の日付で同じです。

再現するには:

$timezone = new DateTimeZone("Europe/Stockholm");
$date1 = new DateTime("Sun, 28 Oct 2012 01:00:00", $timezone);
$date2 = new DateTime("Mon, 29 Oct 2012 00:00:00", $timezone);
$date1->setTimezone($timezone);
$date2->setTimezone($timezone);
$diff = $date1->diff($date2);
var_dump($diff);

更新 2:

Java と JodaTime クラスを使用すると、24 時間かかります。したがって、どうやら正しい答えは明らかではありません:)

4

2 に答える 2

1

あなたは夏時間に取り組んでいます。

ご存じのように、10 月には夜間に 1 時間が余分に挿入されます。DST の終わりに、午前 0 時から午前 1 時までの時間が繰り返されます。これは、10 月 28 日の日曜日の時刻「午前 1 時」があいまいであることを意味します。それらの2つがありました。午前 1 時が 2 回発生しました。

つまり、「日曜日の午前 1 時から他の特定の時間までの間に何時間あったか」について正確な答えがないということです。有効な答えは 2 つあります。PHP は 1 つを提供していますが、もう 1 つを期待しています。

ローカル タイムゾーンを使用して時間を計算している限り、この問題は解決できません。唯一の解決策は、すべての日付の計算と日付の保存に常に UCT を使用し、ユーザーに実際に時刻を表示するときにのみローカル タイムゾーンに切り替えることです。

于 2012-10-29T10:41:16.420 に答える
0
$time = strtotime("Mon, 29 Oct 2012 00:00:00 +0100")-strtotime("Sun, 28 Oct 2012 01:00:00 +0200");
$days=$time/(24*60*60);
echo $days; 
于 2012-10-29T10:29:18.743 に答える