【发布时间】:2015-03-12 20:49:04
【问题描述】:
背景
我有一个设置为某个(英国)时间的事件列表。我希望用户在他们的当地时间看到事件的时间。例如:如果事件在英国时间
20:30 开始,来自荷兰的用户应该看到开始时间为21:30。问题
我已经设置好了所有东西,并且正在创建新的
DateTime 对象来设置我的事件。但是,当我指定 DateTimeZone 对象时,它会显示 +00:00 而不是我为它创建的 DateTimeZone。这意味着新的时间不正确。因此,设置为20:30 英国时间的时间仍以20:30 NL 时间而不是21:30 推出。
代码
这是我写的代码。据我所知,我所做的一切都是正确的,但是当分配给
DateTime 对象时,DateTimeZone 仍然不正确。
默认设置:
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 的顺序。
- 我尝试在创建
DateTime对象之前创建DateTimeZone。我确保它是一个正确的对象,然后将其设置在DateTime构造函数中。 - 我尝试先创建一个
DateTime对象,仅使用时间戳作为参数,然后设置DateTimeZone对象(我知道有/曾经有一个错误导致直接设置DateTimeZone时出现一些奇怪的行为)。 - 根据docs,我已确定我要设置的时区 (
Europe/Amsterdam) 是合法的。
我开始怀疑使用timestamp 时是否无法转换日期?
我也看过这些问题的基本要点,但他们没有这样的问题:
1.Converting between timezones in PHP
2.How to convert between time zones in PHP using the DateTime class?
我又关注了几个,但目前找不到。
问题
为什么我的
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 的不同。
【问题讨论】:
-
@cmorrissey 我已经试过了。我什至在我的问题中指定了它......问题不是转换,而是设置
DateTimeZone。在我看来,这绝对不是重复的。
标签: php datetime timezone datetime-conversion