2017-04-26 204 views
0

我有我的Apache服務器和PHP設置爲date_default_timezone_set(「America/Los_Angeles」)。時間戳/時區/ PHP/MySQL

在MySQL中,我使用CURRENT_TIMESTAMP和其中一些EXTRA作爲「on update CURRENT_TIMESTAMP」保存TIMESTAMP字段。

我是以正確的方式做這個還是我失去了TIMESTAMPS的全部觀點?我希望用戶能夠選擇自己的時區,但它似乎將本地時區保存到MySQL,而不是通用參考點。

我是否應該將服務器時區設置爲UTC,並在PHP date_default_timezone_set(「America/Los_Angeles」)中或用戶時區是什麼,然後將值保存到MySQL字段中,而不是CURRENT_TIMESTAMP(這似乎取決於在PHP的設置)?

謝謝!

+2

[PHP,MySQL和時區](http://stackoverflow.com/questions/5768380/php-mysql-and-time-zones)和[夏令時和時區最佳實踐](http ://stackoverflow.com/questions/2532729/daylight-saving-time-and-time-zone-best-practices?rq = 1) –

回答

1

理想情況下,您希望數據庫以UTC的形式存儲數據,這樣它就不會固定在任何特定地理位置。來自用戶的傳入數據根據用戶的時區進行轉換,您顯示的任何內容也可以轉換回用戶的首選時區。

有些系統甚至會將UTC時間發送到HTML中的客戶端,但使用JavaScript掛鉤並在客戶端重新呈現具有適當本地時間的內容來標記該元素。

最好是在用戶記錄和/或會話中保留一個用戶指定的設置,該設置定義應對他們指定或顯示的日期和時間執行哪些轉換(如果有)。

還值得注意的是TIMESTAMP字段僅限於2038年,所以他們已經靠借用時間生活了。最好使用更具標準的DATETIME字段,它具有更寬的可接受值範圍。

+0

@tadman謝謝!是否將它保留在我的時區中,並讓它成爲主控器而不是UTC?我喜歡能夠直接在數據庫中查看,並且時刻都在我的位置。但如果這樣做有任何缺點,我會跳過這種方便。 – SeaBass

+1

你想投資的技能之一是能夠閱讀UTC時間並理解它們。沒有比將數據庫從加利福尼亞州的服務器移動到新澤西州的服務器更麻煩的事了,突然之間,由於時區轉移,您的所有時間都被徹底摧毀了。保持中立,你不會有這樣的問題。飛行員使用「祖魯時間」(UTC)作爲原則問題,他們總是改變時區,你也可以。 – tadman