2013-03-16 107 views
2

我正在嘗試同步我的PHP和MySQL時間。目前,時代不同了(如下輸出):同步MySQL和PHP時間

'SELECT CURRENT_TIMESTAMP' returns '2013-03-16 13:14:28' 
'date('Y-m-d g:i:s')'  returns '2013-03-16 10:14:28' 

我已經成功,從其他用戶閱讀,使用SET time_zone='-7:00';改變MySQL的時間。問題是基於用戶位置的不同查詢時間會發生變化,我寧願不更改每個查詢的time_zone

我應該只設置一次time_zone,使其與服務器的時間相同,然後根據用戶的時區在PHP中更改時間?或者有更好的方法去解決這個問題嗎?

預先感謝您!

回答

2

如果我只是設置TIME_ZONE一次,使得它同時作爲服務器,然後更改基於用戶的PHP中時區的時間?或者有更好的方法去解決這個問題嗎?

是的。由於夏令時間的限制,您也不應通過GMT時區設置時區。你可以編寫自己的函數來設置date_default_timezone_set('UTC');然後到用戶的時區。

$time = strtotime('2013-03-16 13:14:28'.' UTC'); 
echo date('Y-m-d g:i:s',$time); //2013-03-16 9:14:28 

另一種替代方法是在「Unix時間」中存儲mysql時間,然後使用PHP轉換一次。

+0

哦,我喜歡將它們存儲在Unix Time中然後每次都進行轉換的想法。謝謝! – doitlikejustin 2013-03-16 19:13:26

1

您絕對想在您的應用程序/數據庫中使用單個時區。如果你必須在顯示給用戶時需要改變數據的時區,那麼只需要改變數據的時區(而不是數據庫或者你的php默認的tz) - 然後在你要顯示它之前只做這些。否則,請使用單個時區。我喜歡GMT

設置MySQL服務器時區:在my.conf 已經somehthing這樣的:default-time-zone='GMT' ,然後重新啓動mysql的 見:http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

對於PHP,在每一個你應該頁面的頂部某處執行這一行:

date_default_timezone_set("GMT"); 
+0

怎麼去做正確的日期已經設置在數據庫中設置了不正確的時區? – doitlikejustin 2013-03-16 18:41:16

+0

您需要使用適當時區中的日期更新數據庫中的任何日期。如果你知道以前的時區是什麼,你只能這樣做。 UPDATE db.table set'date' = CONVERT_TZ('date','old tz','GMT') – Tucker 2013-03-16 18:47:33

+0

感謝您提供轉換日期的提示! – doitlikejustin 2013-03-16 19:13:52