【发布时间】:2017-01-26 18:05:56
【问题描述】:
我今天一直在努力解决一个奇怪的问题。出于某种原因,我的服务器假装时区“欧洲/柏林”是 UTC(它应该是 UTC+1)。例如,如果我将时区设置为“欧洲/布鲁塞尔”,它会正确转换时间。
我创建了一些虚拟代码来测试我的服务器和在线编译器。虽然编译器工作正常(我使用过http://sandbox.onlinephpfunctions.com/),但我的服务器仍然存在这个问题。
代码如下:
<?php
$time = 'now';
$timezone1 = 'Europe/London';
$timezone2 = 'Europe/Berlin';
$timezone3 = date_default_timezone_get();
$timezone4 = 'Europe/Brussels';
$dateTime1 = new \DateTime($time, new DateTimeZone($timezone1));
$timeParsed1 = $dateTime1->format('Y-m-d H:i:sP');
$dateTime2 = new \DateTime($time, new DateTimeZone($timezone2));
$timeParsed2 = $dateTime2->format('Y-m-d H:i:sP');
$dateTime3 = new \DateTime($time, new DateTimeZone($timezone3));
$timeParsed3 = $dateTime3->format('Y-m-d H:i:sP');
$dateTime4 = new \DateTime($time, new DateTimeZone($timezone4));
$timeParsed4 = $dateTime4->format('Y-m-d H:i:sP');
echo($timezone1 . ': ' . $timeParsed1 . '<br>' . $timezone2 . ': ' . $timeParsed2 . '<br>' . $timezone3 . ': ' . $timeParsed3 . '<br>' . $timezone4 . ': ' . $timeParsed4);
?>
这是生成的输出:
Europe/London: 2017-01-26 01:24:18+00:00
Europe/Berlin: 2017-01-26 01:24:18+00:00
UTC: 2017-01-26 01:24:18+00:00
Europe/Brussels: 2017-01-26 02:24:18+01:00
我一直在努力寻找原因,并在 Stackoverflow 上进行了搜索,但找不到原因。这是我的 phpinfo() 的链接:http://arma.jianji.de/phpinfo.php
这是我服务器上正在运行的虚拟代码:http://arma.jianji.de/phptest.php
我最近使用 Ubtuntu 16 LTS 和 Plesk Onyx 设置了服务器。服务器默认时区设置为伦敦。
很遗憾,我一直找不到原因。你有什么想法吗?
提前感谢您的帮助!
更新
因为这已经被提出了很多,我创建了一个测试,我使用以下方法设置默认时区:
date_default_timezone_set('Europe/Brussels');
此外,我在 php.ini 中添加了“欧洲/伦敦”作为默认时区。
【问题讨论】:
-
服务器运行的是什么版本的PHP?
-
如果我正确理解了这个问题,这似乎是 PHP 7s 时区定义中的一个错误。布鲁塞尔和柏林都在 UTC+01:00 ... bugs.php.net
-
您的
tzdata包是最新的吗?您可以使用apt-get -s install tzdata模拟包更新 -
@jastend,
date +%z命令的输出是什么? -
@jastend,tzdata 应该有问题。查看
zdump -V Europe/Berlin | grep 2017的输出。我建议更新 timezone-data 包并重新安装 PHP