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 は適用されません。バグでしょうか?