背景
我有一个设置为某个(英国)时间的事件列表。我希望用户在他们的当地时间看到事件的时间。例如:如果事件在
20:30英国时间开始,来自荷兰的用户应该看到开始时间为21:30。问题
我已经设置好所有东西,并且正在创建新
DateTime对象来设置我的事件。但是,当我指定我的DateTimeZone对象时,它会显示+00:00而不是DateTimeZone我为它创建的对象。这意味着新的时间不正确。因此,设置为20:30英国时间的时间仍然推出为20:30NL 时间,而不是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根据文档,我已确保我要设置的时区 ( ) 是合法的。
我开始怀疑使用 a 时是否无法转换日期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_typeand timezone。