2017-06-15 69 views
0

我想將我的網站的時區設置爲歐洲/布魯塞爾。 我做了一個小的PHP文件:設置時區問題

<?php 
$DT = new DateTime($timestamp,new DateTimeZone('UTC')); 
$DT->setTimezone(new DateTimeZone('Europe/Brussels')); 
$date = $DT->format('Y-m-d H:i:s'); 
?> 

我已經包含在其他PHP文件這個文件。 我遇到的問題是我在我的mysql上放了一個時間戳 比我在其他文件中用預處理語句PDO調用此時間戳 但即使如此,我在每個頁面上設置了新的默認時間, 「M使用日期並沒有得到調整。

正如我不能在MySQL的時區變化,由於他們建議我用上面的腳本我的供應商的限制。但是,這是行不通的。

我在做什麼錯了?

+0

請更新您的問題,並壓平'與實際的時刻$ timestamp'然後上傳您從'var_export得到什麼($日期);'和你期待的。 – mkaatman

+0

「上面的腳本」只是一個建議。這只是爲DateTime類的一個實例設置時區,而不是以任何方式全局設置。他們建議在任何地方使用日期,將該日期實例化到DateTime對象中,然後設置您選擇的時區。這不是你會包含在所有文件中的東西。 –

回答

1

你可能已經改變了你的默認時區在PHP中,但你也需要改變它爲你的MySQL以及MySQL生成的時間戳將基於爲MySQL設置的時區。

這裏有一個如何你的MySQL時區與你的PHP時區同步的例子:

<?php 
$now = new DateTime(); 
$mins = $now->getOffset()/60; 
$sgn = ($mins < 0 ? -1 : 1); 
$mins = abs($mins); 
$hrs = floor($mins/60); 
$mins -= $hrs * 60; 
$offset = sprintf('%+d:%02d', $hrs*$sgn, $mins); 

//Your DB Connection - sample 
$db = new PDO('mysql:host=localhost;dbname=test', 'dbuser', 'dbpassword'); 
$db->exec("SET time_zone='$offset';"); 
+0

我可以將它包含在time.php文件中,並將它包含在我所有其他的php文件中?或者我該怎麼做呢? – WouterS

+0

@外觀它取決於你想要做什麼。通常,不要過多地更改數據庫的默認時區,以便數據庫條目中的舊時間戳不受更改的影響。 – Tony

+1

@WouterS如果您只處理「歐洲/布魯塞爾」時區,那麼將數據庫設置爲一次並且永不改變它可能是一個好主意。如果您有多個時區的用戶,我建議您將數據庫時區設置爲「UTC」,然後根據用戶查看返回的時間進行調整。 – Tony