PHP时区问题| BST和GMT

时间:2015-05-27 09:08:43

标签: php timezone utc gmt

我开发了一个应用程序来记录修改和创建某些记录的时间,所以基本上我们使用time()函数来记录保存更改的时间。

我在英国所以我的时区必须是GMT。然而在英国,我们使用夏令时,所以在夏天我们不再是格林威治标准时间,而是在BST。

如何更改使用BST的时区(GMT +1)。我想在我的php文件中声明它,以便它很容易更改。这就是我现在所拥有的:

date_default_timezone_set("UTC");

当我将其更改为:

date_default_timezone_set("BST");

我收到了一个php错误Timezone ID 'BST' is invalid,当我将其更改为欧洲/伦敦时,它仍然保留为GMT而不是BST

2 个答案:

答案 0 :(得分:7)

您要将时区设置为Europe/London,这会在适当的日期自动在GMT和BST之间切换。时区包含这些信息,基本上是时区(在PHP意义上)。

PHP手册可以轻松地包含this as a sample

$timezone = new DateTimeZone("Europe/London");
$transitions = $timezone->getTransitions();
print_r(array_slice($transitions, 0, 3));

Array
(
    [0] => Array
        (
            [ts] => -9223372036854775808
            [time] => -292277022657-01-27T08:29:52+0000
            [offset] => 3600
            [isdst] => 1
            [abbr] => BST
        )

    [1] => Array
        (
            [ts] => -1691964000
            [time] => 1916-05-21T02:00:00+0000
            [offset] => 3600
            [isdst] => 1
            [abbr] => BST
        )

    [2] => Array
        (
            [ts] => -1680472800
            [time] => 1916-10-01T02:00:00+0000
            [offset] => 0
            [isdst] => 
            [abbr] => GMT
        )

)

答案 1 :(得分:1)

time()函数返回一个unix时间戳,它始终基于UTC(与GMT相同)。对于BST或任何其他时区进行调整将无效。

还有其他功能可以处理本地时间,以及将unix时间戳转换为字符串以供显示。这是您使用Europe/London时区的地方。

BST无效,因为它可能代表“孟加拉国标准时间”或其他一些时区。一般来说,不要依赖时区缩写。