資料庫有使用 datetime 欄位類型來記錄時間,伺服器時區、mysql時區、PHP時區問題該如何設定?
方案一、所有伺服器全部統一使用UTC時區,PHP程式使用UTC時區,寫入到資料庫的 datetime 類型時間就是 UTC,拿出來再轉當地時區。
方案二、所有伺服器的時區隨意設置,程式時區隨意設置,但是所有涉及時間儲存的都使用 int 型別存時間戳記。
為啥你不設定你的資料庫,php都是Asia/Shanghai這個時區呢。
Asia/Shanghai
伺服器的時區一定要統一。通常我都是在資料庫裡記錄時間戳記。因為我覺得搜尋起來方便。跨國訪問的話。格式化時間戳記的時候在進行對應的處理就好了。
只建議使用時間戳
終於知道為什麼時間必須用時間戳了,原來是因為時區問題。但是laravel中carbon類別好像把這個問題解決了,可以隨意轉換時間格式,當然時間戳性能最強悍,尤其是搜尋的時候,int類型效率比datetime要高很多。
嚴格來說,不管你處在地球上的哪個地方,任意時間點的時間戳記都是一樣的。例如1452783600這個時間戳,在巴黎是下午4點在舊金山就是早上7點。這點有利於線上和客戶端分散式應用統一追蹤時間資訊。
+8小時,另外所有時間格式最好是用時間戳保存,時間戳記不會出現時區問題,時間戳沒有時區的概念。 嚴格來說,不管你處在地球上的哪個地方,任意時間點的時間戳記都是一樣的。
1.使用datetime,php/mysql时区设置为UTC+082.使用int,直接存时间戳,显示的时候再使用date格式化一下
datetime
UTC+08
date
為啥你不設定你的資料庫,php都是
Asia/Shanghai
這個時區呢。伺服器的時區一定要統一。通常我都是在資料庫裡記錄時間戳記。因為我覺得搜尋起來方便。跨國訪問的話。格式化時間戳記的時候在進行對應的處理就好了。
只建議使用時間戳
終於知道為什麼時間必須用時間戳了,原來是因為時區問題。但是laravel中carbon類別好像把這個問題解決了,可以隨意轉換時間格式,當然時間戳性能最強悍,尤其是搜尋的時候,int類型效率比datetime要高很多。
嚴格來說,不管你處在地球上的哪個地方,任意時間點的時間戳記都是一樣的。例如1452783600這個時間戳,在巴黎是下午4點在舊金山就是早上7點。這點有利於線上和客戶端分散式應用統一追蹤時間資訊。
+8小時,另外所有時間格式最好是用時間戳保存,時間戳記不會出現時區問題,時間戳沒有時區的概念。
嚴格來說,不管你處在地球上的哪個地方,任意時間點的時間戳記都是一樣的。
1.使用
datetime
,php/mysql时区设置为UTC+08
2.使用int,直接存时间戳,显示的时候再使用
date
格式化一下