私はPHP DateDiffに問題があります。なぜ、各タイムゾーンが異なる結果を返すのか理解できません。たとえば、この場合プラハは0ヶ月、米国は1ヶ月戻ります。DateDiffは各タイムゾーンで異なる結果を返します
この相違点は何ですか?また、期待どおりに1ヶ月(30日、1ヶ月追加した場合)を返す方法は何ですか?
コードヨーロッパ/プラハ:
date_default_timezone_set("Europe/Prague");
$from = new \DateTimeImmutable('2016-09-01');
$to = $from->add(new \DateInterval('P1M'));
var_dump($from);
var_dump($to);
var_dump($from->diff($to)->m);
var_dump($from->diff($to)->d);
結果ヨーロッパ/プラハ:
object(DateTimeImmutable)#1 (3) {
["date"]=>
string(26) "2016-09-01 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Prague"
}
object(DateTimeImmutable)#3 (3) {
["date"]=>
string(26) "2016-10-01 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Prague"
}
int(0)
int(30)
-
コード米国/太平洋:
date_default_timezone_set("US/Pacific");
$from = new \DateTimeImmutable('2016-09-01');
$to = $from->add(new \DateInterval('P1M'));
var_dump($from);
var_dump($to);
var_dump($from->diff($to)->m);
var_dump($from->diff($to)->d);
結果、米国/太平洋:
object(DateTimeImmutable)#2 (3) {
["date"]=>
string(26) "2016-09-01 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(10) "US/Pacific"
}
object(DateTimeImmutable)#4 (3) {
["date"]=>
string(26) "2016-10-01 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(10) "US/Pacific"
}
int(1)
int(0)
はあなたにも 'var_dump'ingの時間、分、秒、ミリ秒を気にしませんか? – Mchl
これはPHP自体のバグでしょうか? –
@MichaelHirschler多分、わからない、これが私の質問をSOに投稿した理由です – patie