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