簡體   English   中英

處理將現有 laravel 應用程序從本地時區轉換為 UTC 的最佳方法

[英]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();

對於上面的代碼示例,任務將提前一小時過期,因為UTCBST晚一小時。

由於更改為UTC將是一個系統的根本變化,我希望我能得到以下問題的答案。

  1. 是否有任何資源概述了將系統從本地時區轉換為 UTC 的方法?
  2. 我應該將所有內容存儲在Europe/London ,然后在前端為用戶轉換,而不是轉換為UTC
  3. 有什么方法可以輕松查詢包含多個時區的數據庫表?

感謝您的幫助,我知道這個問題很困難,所以任何能指出我正確方向的東西都將不勝感激。

不能說你列表中的第一項,這是我對第二項的看法。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM