バックグラウンド
特定の (英国) 時間に設定されているイベントのリストがあります。ユーザーに現地時間でイベントの時間を表示してもらいたい。例: イベントが
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
。