时区和保存的时间戳

时间:2016-09-09 06:28:57

标签: php mysql datetime

这严重破坏了我的大脑,我甚至无法想出一个标题,其中包含了我的问题,让我试着解释一下。

所以我有一个时间记录页面需要time()并将其存储在数据库中。现在这个页面可以在不同的州使用 - 在这个例子中在澳大利亚/悉尼和澳大利亚/布里斯班。我可以设置时区并打印出正确的时间。

但这是我感到困惑的地方,时间戳是时间戳,无论是在布里斯班还是悉尼 - 对吗?通过设置时区,我可以使用相同的时间戳来显示布里斯班或悉尼时间戳的实际时间。

悉尼并不总是在夏令时,所以如果读取保存的时间戳,转换的时间将是错误的?我在这里咆哮错误的树,我的逻辑让我失望了吗?我的意思是以不同的方式保存时间戳吗?

1 个答案:

答案 0 :(得分:1)

函数time()始终返回与时区无关的时间戳(UTC)。在PHP中创建日期对象时,时区才会发挥作用。 PHP将php.ini中设置的任何时区应用于时间戳,并使其成为与时区对应的日期:

$date = new DateTime();
$date->setTimestamp(1171502725); // We just made a date in php.ini's timezone based on a UTC timestamp

或者,您可以告诉PHP您想要日期的时区,它将覆盖php.ini中的任何内容:

$date->setTimezone(new DateTimeZone('Australia/Sydney'));

当PHP生成日期对象时,在内部它只是添加(或减去)时区偏移量。