2

DateTime オブジェクトから同じ DateInterval を加算および減算すると異なる日付になる理由を説明してもらえますか? 時間を見てください。間隔を引くと 20:00 から 19:00 になりますが、間隔を追加すると 19:00 のままです。

$date = new DateTime("2015-04-21 20:00", new DateTimeZone('Europe/Berlin'));

$days = 28;
$minutes = $days * 24 * 60;

$interval = new DateInterval("PT{$minutes}M");

var_dump($date);
$date->sub($interval);
var_dump($date);
$date->add($interval);
var_dump($date);

結果:

object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2015-04-21 20:00:00.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(13) "Europe/Berlin"
}
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2015-03-24 19:00:00.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(13) "Europe/Berlin"
}
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2015-04-21 19:00:00.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(13) "Europe/Berlin"
}

$date->sub($interval);夏時間の違いにより、時間が 20:00 から 19:00 に変更されているように見えます(他の日付、つまり 2015-05-21 20:00 では期待どおりに動作します) が、 $date->add($interval);DTS は適用されません。バグでしょうか?

4

3 に答える 3

0

それは確かにサマータイムのせいです。タイム ゾーンを「America/Los_Angeles」に変更した場合、LA では 3 月の初めに時刻が変更されたので問題ありません。同じタイム ゾーンで 11 月の初めに日付を設定してテストすることもできます。この場合、21:00 になる 28 日前に表示されます。

サポートされているタイム ゾーンについては、こちらを確認してください。

于 2015-06-17T12:40:55.880 に答える