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
对象(我知道/有一个错误导致设置{{1直接)。 DateTimeZone
)是合法的。 我开始怀疑使用Europe/Amsterdam
时是否无法转换日期?
我也看了这些问题的基本要点,但他们没有这样的问题:
1. Converting between timezones in PHP
2. How to convert between time zones in PHP using the DateTime class?
我跟了几个,但我现在找不到它们。
timestamp
对象的格式不正确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
。
答案 0 :(得分:4)
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");
上面脚本的输出:
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
如果您不想修改原始$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");
显示:
Local time in Bucharest: 2015-02-14 21:30:00
我在OSX上使用PHP 5.6.6运行代码。
DateTime
及其相关类在早期版本中有很多错误(PHP 5.2,PHP 5.3)。其中大多数都是在最近的版本中修复的(但仍有一些隐藏的小问题)。
我的建议是使用您可以在系统上安装的最新版本的PHP。
答案 1 :(得分:0)
根据文档:
注意:
$ timezone参数和当前时区将在 $ time参数是UNIX时间戳(例如@ 946684800)或 指定一个时区(例如2010-01-28T15:00:00 + 02:00)。
因此,只需使用“ setTimezone()”解决方案或提供日期时间字符串:)