php - 如何在 PHP 应用程序中处理 DST 时移?

标签 php

我必须维护一些旧的浏览器游戏,在这个游戏中,用户拥有可以产生资源的行星。当用户打开星球 View 时,资源量是通过构建星球上次更新和当前时间之间的差异来计算的,如下所示:

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

今晚有时间转换(至少在德国从夏令时到正常时间 - 或者正如我们在德语中所说的从“夏令时”到“冬令时”),因此在"new"凌晨 2 点和"new"之间"凌晨 3 点,上述差异为负数,因此玩家会失去资源而不是获得资源。

当然,如果它变得负数,我可以通过将 $secondsBetweenUpdate 设置为零来避免丢失,但是有没有办法正确处理转变?老实说,我什至不确定什么是正确的 - 无论秋季从夏令时更改为正常时间,还是从正常时间更改为夏令时。

有人可以给我一些建议来处理这样的时间转变吗?

我看到了这个关于 Daylight saving time and time zone best practices 的帖子一个建议是将所有时间存储为祖鲁时间。我该如何做到这一点以及如何正确地向用户显示时间 - 这意味着他看到的时间与他的时间相同,例如观看?

我们使用 PHP(当然还有 CSS 和 JavaScript)、Mysql,并部分迁移到 cakePHP 框架。

最佳答案

在您的服务器上使用 GMT 时区,该时区没有时移。

执行此操作的方式因系统而异。例如,在 Ubuntu 中,您将执行以下操作:

sudo dpkg-reconfigure tzdata

然后选择 GMT 选项。

然后,如果您需要显示日期,您可以使用 PHP 的日期库来更改时区以适应客户的偏好,例如(东部标准时间):

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

PHP 将处理时移,例如由于美国实行夏令时

关于php - 如何在 PHP 应用程序中处理 DST 时移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33331238/

相关文章:

php - 我想改变多维数组的键

php - 如果浮点型小数部分的LSB为零,Mysql会丢弃它

php - 如何查看我的 Flash 应用程序的带宽使用情况?

php - 使用 php 的 dynamodb getitem - 我只想检索值

php - 为什么我要查询两次

php - 有效地计算文本文件的行数。 (200mb+)

php - 如何在 php 日期中使用时区?

php - 将大表格发布到 php 文件

php - 如何在 php 中生成唯一的 session ID

PHP正则表达式定界符,有什么意义?