0

我需要存储客户端时区,并且想知道是否需要考虑 DST。我只关心显示用户的本地时区,如果 DST 生效,那么系统应该反映它。

使用设置用户的时区date_default_timezone_set并假设如果该区域有一个 DST 将自动计算是否足够?

我还需要做些什么来确保向用户显示正确的时间吗?

编辑: 这里有一些很好的答案,谢谢。

如果我将用户时间戳存储在 UTC 中,无论他们的实际时区如何,并且我date_default_timezone_set用来转换 UNIX 时间戳,如果存在 DST,是否会显示正确的时间?

4

1 回答 1

0

最好将日期和时间存储为 UTC+0。当您在 PHP 中向用户打印日期时,诸如 date()接受时间戳参数之类的函数。这些函数还会自动将时间戳转换为当前时区。时间戳始终为 UTC+0。

在 PHP 脚本中,您可以像这样更改默认时区:

date_default_timezone_set("Europe/Oslo");

之后,我在运行时得到这个结果date("r")

Sun, 27 Oct 2013 11:22:52 +0100

当您使用地理时区名称时,时间将根据一年中的哪个时间转换为正确的时区。在我的示例中,现在选择了“CET(GMT+1)”,但昨天它会给我夏令时时区“CEST(GMT+2)”。

例如,要将当前时间存储在数据库中,您通常可以将时间戳存储为整数 ( INT(11))。当前的 UTC+0 时间戳是用 PHP 检索的time()

于 2013-10-27T10:24:05.123 回答