簡體   English   中英

如何處理PHP應用程序中的DST時移?

[英]How to handle DST time shifts in a PHP application?

我必須維護一些舊的瀏覽器游戲,並且在此游戲中,用戶擁有會產生資源的行星。 當用戶打開行星視圖時,資源的數量是通過建立行星的最后一次更新與當前時間之間的差異來計算的,如下所示:

$secondsBetweenUpdate = time() - $lastUpdate; // Timestamps

今天晚上有時間偏移(至少在德國,從夏令時轉變為正常時間,或者我們用德語說從“夏令時”轉變為“冬季時間”),因此在“新” 2AM和“新” 3AM之間上述差異是負的,因此玩家會失去資源而不是獲取資源。

可以肯定的是,如果將$secondsBetweenUpdate設置$secondsBetweenUpdate ,則可以將$secondsBetweenUpdate設置為零,從而避免這種松動,但是有沒有一種方法可以正確處理這種變化呢? 老實說,我什至不確定是正確的-無論是從夏令時更改為秋天的正常時間,還是從正常時間更改為夏令時。

誰能給我一些建議以應對這種時移?

我看到了有關夏令時和時區最佳實踐的 SO Thread,一個建議是將所有時間都存儲為Zulu時間。 我該怎么做?如何正確顯示用戶的時間-意味着用戶看到的時間與手表上的時間相同?

我們使用PHP(當然還有CSS和JavaScript),Mysql,並且部分遷移到cakePHP框架。

在沒有時間偏移的服務器上使用GMT時區。

這樣做的方式因系統而異。 例如,在Ubuntu中,您將執行以下操作:

sudo dpkg-reconfigure tzdata

並選擇GMT選項。

然后,如果需要顯示日期,則可以使用PHP的日期庫來更改時區以適合客戶的偏好,例如(對於東部標准時間):

$date = new DateTime($lastUpdate);
$date->setTimezone(new DateTimeZone('EST'));

PHP將處理時移,例如由於美國的DST

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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