Handle_cross_time_zone.md
Translated by ChatGTP
處理跨時區
解決方案
如果我們有來自不同時區的客戶端,我們應該如何存儲時間數據?
我認為最好的方法是由客戶端將時間轉換為時間戳,或在 API 中提供時區信息。
其他方法
但如果另一個團隊成員建議只存儲原始日期時間或時間戳呢?
這會導致問題嗎?如何證明呢?
存儲日期時間
如果當前時間是 GTM +0 2023-02-09 00:00:00
,並且我們有兩個客戶端在兩個時區,分別是 GMT +2
和 GMT +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
,這是正確的時間戳。
但是,我們仍然有兩個問題,
- 我們除非知道服務器和客戶端的時區以及數據如何存儲,否則無法顯示正確的日期時間。這可能很複雜。
- 如果客戶端有多個時區,時間仍會有錯誤。
- 如果我們有另一個 GMT +3 的客戶端,則時間戳將是
1675882800
,如果從 GMT +2 調用獲取數據 API,則時間戳將不匹配。
- 如果我們有另一個 GMT +3 的客戶端,則時間戳將是