繁体   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