我想了解究竟是什麼責任在我的應用程序堆棧中分別更改和轉換時區和時間,以及在應用程序代碼中將時間轉換爲所需時區的最佳方法是什麼。在PHP和MySQL中處理時區
我目前正在使用:
的JavaScript/HTML字體結束
Laravel的PHP框架服務器端
MySQL存儲(默認爲本地系統時間時間戳等)
我的意見是:
MySQL無法存儲DateTime列的時區,只是存儲YYY:MM:DD hh:mm:ss,並由開發人員將時區存儲在單獨的列中,並將存儲的時間轉換爲應用程序代碼中的本地用戶如果用戶時區不同。
PHP,Laravel應用程序應該工作並將任何DateTime實例轉換爲使用date_default_timezone_set()函數設置的時區。
行爲我目前觀察:
我回來後與JavaScript的日期時間格式設置對象屬性JSON。這種格式看起來像我這樣:例如'Thu Jun 16 2016 18:00:00 GMT + 1000(AEST)'
當這個json數據命中我的服務器時,即使我將date_default_timezone_set('Australia/Sydney ')在控制器類中或更改應用程序配置,替換laravel UTC默認值。我懷疑有東西沒有註冊?如果我能夠節省時間,因爲它來自客戶端(不會自動轉換爲UTC),如果用戶在澳大利亞/悉尼(這其中大部分是用戶),我不必稍後將其轉換爲用戶本地時區)。
我的應用程序將此UTC調整時間存儲在數據庫中,但實際上沒有任何記錄表示它是UTC。當然不是很重要,因爲我可以推測UTC的默認值。
當使用雄辯或DB:查詢檢索記錄時,沒有自動轉換爲用戶時區,它只是返回存儲(轉換爲UTC)時的時間,需要應用程序代碼將其轉換爲正確的時區,否則用戶(在澳大利亞我的情況)將尋求UTC時間,而不是本地AEST等等
轉換時間:
有自動轉換所有檢索到的UTC時間從數據庫中一個輕鬆自由的方式用戶本地時區或某個指定的默認時區,如果所有用戶都是從同一時區推定的?
理想情況下,我想從數據庫中提取記錄,並將所有時間屬性調整爲指定的時區,並考慮夏時制。我將不得不運行一個for循環,並用Carbon方法等來轉換/設置每個屬性?
如果date_default_timezone_set('澳大利亞/悉尼)設置並正常工作,應該PHP自動轉換的時間屬性對所有這些對象,因爲它們是從數據庫中檢索?當它打到服務器時不將時間數據轉換爲UTC?