バックグラウンド
特定の (英国) 時間に設定されているイベントのリストがあります。ユーザーに現地時間でイベントの時間を表示してもらいたい。例: イベントが
20:30英国時間に開始する場合、オランダのユーザーには開始時間が と表示され21:30ます。問題
すべての設定が完了し、イベントを設定する新しい
DateTimeオブジェクトを作成しています。ただし、オブジェクトを指定すると、作成したDateTimeZoneオブジェクト+00:00の代わりに表示DateTimeZoneされます。これは、新しい時刻が正しくないことを意味します。20:30そのため、英国時間に設定されていた20:30時間は、21:30.
コード
これは私が書いたコードです。私の知る限り、私がしていることはすべて正しいですが、オブジェクト
DateTimeZoneに割り当てられたときはまだ正しくありません。DateTime
デフォルト設定:
date_default_timezone_set('Europe/London');
DateTimeオブジェクトを現地時間に変換するコード:
$user_timezone = Helper::get_user_timezone(); //contains "Europe/Amsterdam"
foreach($events as $event){
$timestamp = $event->getDatetime()->getTimestamp();
$local_datetime = new DateTime('@'.$timestamp, new DateTimeZone($user_timezone));
}
入力
次の
DateTimeオブジェクトを入力として使用します。
DateTime Object
(
[date] => 2015-02-14 19:30:00.000000
[timezone_type] => 3
[timezone] => Europe/London
)
出力
これにより、次の
DateTimeオブジェクトが出力されます。
DateTime Object
(
[date] => 2015-02-14 19:30:00.000000
[timezone_type] => 1
[timezone] => +00:00
)
私は何を試しましたか
私は複数のことを試しました。ほとんどの場合、設定した順序に関するものでした
DateTimeZone。
- オブジェクト
DateTimeZoneの作成前にを作成してみました。DateTimeそれが正しいオブジェクトであることを確認し、DateTimeコンストラクターに設定しました。 DateTime最初にタイムスタンプのみをパラメーターとしてオブジェクトを作成し、DateTimeZone後でオブジェクトを設定しようとしました(直接設定すると奇妙な動作を引き起こすバグがある/あったことはわかっていますDateTimeZone)。- ドキュメント
Europe/Amsterdamに従って、設定したいタイムゾーン () が正当であることを確認しました。
timestamp?を使用するときに日付を変換できないのではないかと思い始めています。
基本的な要点についてこれらの質問も見ましたが、そのような問題はありません:
1. PHP でタイムゾーン
を変換する
2. DateTime クラスを使用して PHP でタイムゾーンを変換する方法
さらにいくつかフォローしましたが、現時点では見つかりません。
質問
DateTimeオブジェクトが正しくない になっているの
はなぜDateTimeZoneですか?
編集
オブジェクトが正しいことを再度確認した後
DateTimeZone、次のようになります。
DateTimeZone Object
(
[timezone_type] => 3
[timezone] => Europe/Amsterdam
)
しかし、新しいDateTimeオブジェクトに設定すると、 と の両方が次のようtimezone_typeにtimezone変更されます。
DateTime Object
(
[date] => 2015-02-14 19:30:00.000000
[timezone_type] => 1
[timezone] => +00:00
)
timezone_typeとが異なることに気付くでしょうtimezone。