Bon*_*ono 4 php timezone datetime datetime-conversion
20:30英国时间开始,来自荷兰的用户应将开始时间视为21:30。DateTime对象来设置我的事件。但是,当我指定我的DateTimeZone对象时,它会显示+00:00而不是DateTimeZone我为其创建的对象。这意味着新时间不正确。因此,设置为20:30英国时间的时间仍会显示为20:30荷兰时间,而不是21:30。
DateTimeZone分配给DateTime对象时仍然不正确。
默认设置:
date_default_timezone_set('Europe/London');
Run Code Online (Sandbox Code Playgroud)
将对象转换为本地时间的代码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));
}
Run Code Online (Sandbox Code Playgroud)
DateTime对象作为输入:
DateTime Object
(
[date] => 2015-02-14 19:30:00.000000
[timezone_type] => 3
[timezone] => Europe/London
)
Run Code Online (Sandbox Code Playgroud)
DateTime对象:
DateTime Object
(
[date] => 2015-02-14 19:30:00.000000
[timezone_type] => 1
[timezone] => +00:00
)
Run Code Online (Sandbox Code Playgroud)
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
)
Run Code Online (Sandbox Code Playgroud)
但是当我将它设置为新DateTime对象时,timezone_type和 都timezone更改为:
DateTime Object
(
[date] => 2015-02-14 19:30:00.000000
[timezone_type] => 1
[timezone] => +00:00
)
Run Code Online (Sandbox Code Playgroud)
您会注意到不同的timezone_type和timezone。
date_default_timezone_set('Europe/London');
$date = new DateTime('2015-02-14 19:30:00');
print_r($date);
echo("Local time in London: ".$date->format('Y-m-d H:i:s')."\n");
$date->setTimeZone(new DateTimeZone('Europe/Amsterdam'));
print_r($date);
echo("Local time in Amsterdam: ".$date->format('Y-m-d H:i:s')."\n");
Run Code Online (Sandbox Code Playgroud)
上面脚本的输出:
DateTime Object
(
[date] => 2015-02-14 19:30:00.000000
[timezone_type] => 3
[timezone] => Europe/London
)
Local time in London: 2015-02-14 19:30:00
DateTime Object
(
[date] => 2015-02-14 20:30:00.000000
[timezone_type] => 3
[timezone] => Europe/Amsterdam
)
Local time in Amsterdam: 2015-02-14 20:30:00
Run Code Online (Sandbox Code Playgroud)
如果您不想修改原始$date对象,那么您可以clone修改克隆的时区:
$roDate = clone $date;
$roDate->setTimeZone(new DateTimeZone('Europe/Bucharest'));
echo("Local time in Bucharest: ".$roDate->format('Y-m-d H:i:s')."\n");
Run Code Online (Sandbox Code Playgroud)
显示:
Local time in Bucharest: 2015-02-14 21:30:00
Run Code Online (Sandbox Code Playgroud)
我在 OSX 上使用 PHP 5.6.6 运行了代码。
相关类DateTime在其早期版本(PHP 5.2、PHP 5.3)中存在很多错误。其中大部分在最近的版本中得到了修复(但仍然存在一些隐藏得很好的小问题)。
我的建议是使用可以安装在系统上的最新版本的 PHP。