前提・実現したいこと
日付文字列とtimezoneを現した数値があります(Asia/Tokyoなら+9、America/Pacificなら-8)。
日付文字列の時刻をUTCとして、timezone の分だけ前後したunixtime を出力したいのですが…
↓(追記、書き直し)
日付文字列とtimezoneを現した数値があります(Asia/Tokyoなら+9、America/Pacificなら-8)。
他から受け取ったunixtimeの値と比較して、片方より未来か過去かを判定しようとしています。
同じ形式で出力してそれを比較すれば良いと思い、
日付文字列とtimezone の値をunixtimeへ変換しようとしたのですが…
発生している問題・エラーメッセージ
私は何かを勘違いしているようです?
(1) は 同じunixtimeが返って、(2)は違うunixtimeが返って…?
なぜ挙動が変わるのかわからず、教えて頂きたいです。
また、(3)で UTCからtzDiff時間前後させた値 == 求めたいunixtime を出力するには、
intval($utcDate->format('U')) + ($tzDiff * 60 * 60) = 求めたいunixtime
としてしまって良いのでしょうか。
該当のソースコード
<?php // (1) $date = new DateTime('now', new DateTimeZone('UTC')); var_dump($date->format('Y-m-d H:s:i').' '.$date->getTimezone()->getName()); var_dump($date->format('U')); var_dump($date->getOffset()); echo("\n"); $date = new DateTime('now', new DateTimeZone('Asia/Tokyo')); var_dump($date->format('Y-m-d H:s:i').' '.$date->getTimezone()->getName()); var_dump($date->format('U')); var_dump($date->getOffset()); echo("\n"); // (2) $utcDate = new DateTime('2018-08-13 00:00:00', new DateTimeZone('UTC')); var_dump($utcDate->format('Y-m-d H:s:i').' '.$utcDate->getTimezone()->getName()); var_dump($utcDate->format('U')); var_dump($utcDate->getOffset()); echo("\n"); $tokyoDate = new DateTime('2018-08-13 00:00:00', new DateTimeZone('Asia/Tokyo')); var_dump($tokyoDate->format('Y-m-d H:s:i').' '.$tokyoDate->getTimezone()->getName()); var_dump($tokyoDate->format('U')); var_dump($tokyoDate->getOffset()); echo("\n"); // (3) $tzDiff = 9; // $tzDiff = -8; if (0 <= $tzDiff) { $utcDate->modify('+'.$tzDiff.' hours'); } else { $utcDate->modify('-'.abs($tzDiff).' hours'); } var_dump($utcDate->format('Y-m-d H:s:i').' '.$utcDate->getTimezone()->getName()); var_dump($utcDate->format('U')); # UTCから9時間進めた値 == 東京のunixtime が返ると思ったのに… var_dump($utcDate->getOffset()); echo("\n");
試したこと
補足情報(FW/ツールのバージョンなど)
// output
string(23) "2018-08-13 14:37:01 UTC"
string(10) "1534168897"
int(0)
string(30) "2018-08-13 23:37:01 Asia/Tokyo"
string(10) "1534168897"
int(32400)
string(23) "2018-08-13 00:00:00 UTC"
string(10) "1534118400"
int(0)
string(30) "2018-08-13 00:00:00 Asia/Tokyo"
string(10) "1534086000"
int(32400)
string(23) "2018-08-13 09:00:00 UTC"
string(10) "1534150800"
int(0)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/13 17:51
2018/08/14 12:07