簡體   English   中英

php 像 UTC 一樣編譯歐洲/柏林時區

[英]php compiles timezone Europe/Berlin like UTC

我今天一直在為一個奇怪的問題而苦苦掙扎。 出於某種原因,我的服務器假裝時區“歐洲/柏林”是 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 中添加了“歐洲/倫敦”作為默認時區。

問題依然存在: http : //arma.jianji.de/phptest_default.php

正如@RuslanOsmanov 親切指出的那樣,歐洲/柏林的時區數據不正確。 我能夠通過使用來驗證這一點

zdump -V Europe/Berlin | grep 2017

為了解決這個問題,我重新安裝了 tzdata 來解決這個問題。

 apt-get --reinstall install tzdata

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM