[英]Best way to handle converting existing laravel application from local timezone to UTC
目前,在我們的 Laravel 應用程序中,我們的時區設置如下。
'timezone' => env('TIMEZONE', 'Europe/London'),
MySQL 數據庫中的所有DateTime
時間和timestamps
字段也存儲在Europe/London
時區。
我們的應用程序現在將切換到UTC
,但是由於BST
目前是一個小時,如果我們在我們的應用程序中將TIMEZONE
更改為UTC
,所有現有的基礎設施都會中斷。
會中斷的事情包括我們現有的使用時間字段的查詢,因為它們與數據庫中的記錄不同步一個小時。
我們在查詢中使用系統中時間的示例如下
Task::where('expired', '=', false)->where('expires_at', '<', Carbon::now())->get();
對於上面的代碼示例,任務將提前一小時過期,因為UTC
比BST
晚一小時。
由於更改為UTC
將是一個系統的根本變化,我希望我能得到以下問題的答案。
Europe/London
,然后在前端為用戶轉換,而不是轉換為UTC
?感謝您的幫助,我知道這個問題很困難,所以任何能指出我正確方向的東西都將不勝感激。
不能說你列表中的第一項,這是我對第二項的看法。 There are actually quite a few timezones you should be aware of: default php timezone (the one from php.ini), server timezone (afaik, if php.ini timezone is empty, it falls back to the one from a server), mysql's時區,部署 mysql 實例的服務器時區,您當前所在的時區,您的用戶的時區,更不用說諸如 mysql 連接時區之類的公開內容。
話雖如此,如果您不想花時間調試花哨的錯誤,那么您希望所有系統時區都相同。 實際上,它到底是什么並不重要。 更重要的是,您了解它們中的每一個,並知道它們如何適用於您的情況。 將所有系統時區設置為 UTC 只是更可預測、更通用、更常見。
但如果我是你,我會保持基礎設施時區設置不變。 我懷疑你會從這一舉動中獲得任何切實的好處。 在前端轉換日期時間實際上是處理此類事情的常用方法。 例如,在 postgres 中,可以將時區與日期時間一起保存,但它幾乎沒有用,因為它已轉換為系統時區。 因此,當我需要 output 給客戶一個日期時間時,我會寫類似
(new AdjustedAccordingToTimeZone(
new FromISO8601('2018-04-25 15:08:01+00:00'),
new Moscow()
))
->value();
關於你的第三個問題,快速谷歌搜索指出了這個問題。 因此,如果您查詢多行,每行都有自己的時區,您可以隨時將這些日期轉換為您希望的任何時區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.