2014-02-22 71 views
1

找遍四周,沒有找到一個明確的答案,以我的問題..時間戳最佳實踐 - PHP,MySQL的

我想知道,用於存儲時間戳信息的最佳實踐。

例子: USER1日誌在佛羅里達州(-0500)下午3:00 EST 管理員登錄到系統中一小時後從加利福尼亞(-0800)下午4:00

我想給管理員查看日誌屏幕上,看到USER1登陸,1小時前..

我的腦子是怎麼回事堅果BC我覺得我在這個複雜..

我應該能夠使用UNIX時間戳記,然後用-0800或-0300調整。

我是否將用戶時區偏移量存儲在他們的個人資料信息中? 我是否將-0300與日誌條目一起存儲。

任何輸入將不勝感激!

回答

1

您在混合客戶端時區和服務器時區。

只要您不關心用戶坐在哪裏,只要您不更改服務器時區,就完全沒有問題。您可以在MySQL和PHP中設置一個默認時區,並且將使用此時區,與訪問者的時區無關。

如果你想尊重你的訪客的時區,它會變得稍微複雜。您需要將時間戳從一個時區轉換爲另一個時區。如果你想用PHP實現這一點,你可以在PHP manual找到關於這方面的信息。如果您對MySQL如何在內部存儲日期(TIMESTAMP和DATETIME類型之間的區別)感興趣,可以閱讀this SO thread,這樣可以使用某些mysql的功能,並且您在實施全局項目時應該明確考慮這些功能。

+0

所以你說的是我應該根據服務器時區在數據庫中存儲時間戳。然後,我存儲用戶時區的問題,當呈現所有的時間給用戶登錄我使用他們的後事? –

+0

是的,這將是一種可能性,也許是最好的方式。 – GhostGambler

+0

另一種選擇是在數據庫中保存UTC,但這需要更多的計劃和思考。你也可以考慮這個解決方案,並決定更適合你的需求。 – GhostGambler

0

時區可以在PHP中動態配置,因此您不需要在數據庫中存儲時間偏移量。存儲unix時間戳是一個很好的解決方案。

+0

將unix時間戳存儲在提供專用日期時間類型的數據庫中是一個不好的解決方案。 – GhostGambler

0

您可以將時間戳存儲爲INTEGER數據類型。

然後,您可以在客戶端使用JS來獲取用戶的時區。

+1

可以,但不應該在提供專用日期時間列類型的數據庫中將時間戳保存爲整數。 – GhostGambler