今天我一直在努力解决一个奇怪的问题。由于某种原因,我的服务器假装时区“欧洲/柏林”是 UTC(应该是 UTC+1)。例如,如果我将时区设置为“欧洲/布鲁塞尔”,它会正确转换时间。
我创建了一些虚拟代码来测试我的服务器和在线编译器。当编译器工作时(我用过http://sandbox.onlinephpfunctions.com/ 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/phpinfo.php
这是我的服务器上正在运行的虚拟代码:http://arma.jianji.de/phptest.php http://arma.jianji.de/phptest.php
我最近使用 Ubuntu 16 LTS 和 Plesk Onyx 设置了该服务器。服务器默认时区设置为伦敦。
不幸的是,我一直无法找到其中的原因。你有好主意吗?
预先感谢您的帮助!
Update
因为这个问题已经被提及很多,所以我创建了一个测试,使用以下方法设置默认时区:
date_default_timezone_set('Europe/Brussels');
此外,我在 php.ini 中添加了“欧洲/伦敦”作为默认时区。
问题仍然存在:http://arma.jianji.de/phptest_default.php http://arma.jianji.de/phptest_default.php