Handle_cross_time_zone.md

Translated by ChatGTP

處理跨時區

解決方案

如果我們有來自不同時區的客戶端,我們應該如何存儲時間數據?

我認為最好的方法是由客戶端將時間轉換為時間戳,或在 API 中提供時區信息。

其他方法

但如果另一個團隊成員建議只存儲原始日期時間或時間戳呢?

這會導致問題嗎?如何證明呢?

存儲日期時間

如果當前時間是 GTM +0 2023-02-09 00:00:00,並且我們有兩個客戶端在兩個時區,分別是 GMT +2GMT +3

如果我們只是從客戶端存儲日期時間,即使它們都是相同的時間,我們也會存儲兩個不同的日期時間。

由服務器端存儲時間戳

如果當前時間是 GMT +0 2023-02-09 00:00:00,時間戳是 1675900800

客戶端的時區是 GMT +2 2023-02-09 02:00:00,時間戳也是 1675900800

服務器的時區是 GMT +8 2023-02-09 08:00:00,時間戳也是 1675900800

如果我們將客戶端轉換為時間戳,在 GMT +0 的時間戳為 1675908000,而在 GMT +8 為 1675879200

當客戶端發送另一個 API 請求以獲取存儲在 GMT +2 2023-02-09 02:00:00 的數據時,服務器將其解析為 GMT +8,

例如:PHP

dd(Carbon::parse('2023-02-09 02:00:00')->timestamp);

結果的時間戳將是 1675879200,這是正確的時間戳。

但是,我們仍然有兩個問題,

  1. 我們除非知道服務器和客戶端的時區以及數據如何存儲,否則無法顯示正確的日期時間。這可能很複雜。
  2. 如果客戶端有多個時區,時間仍會有錯誤。
    • 如果我們有另一個 GMT +3 的客戶端,則時間戳將是 1675882800,如果從 GMT +2 調用獲取數據 API,則時間戳將不匹配。