PHP时区问题|BST和GMT


PHP timezone issue | BST and GMT

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

我在英国,所以我的时区必须是GMT。然而在英国,我们使用夏令时,所以夏天我们不再是GMT,而是BST。

如何将时区更改为使用BST(即GMT+1(。我想在我的php文件中声明它,这样它就很容易更改。以下是我目前拥有的:

date_default_timezone_set("UTC");

当我将其更改为:

date_default_timezone_set("BST");

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

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

PHP手册很方便地包含了以下示例:

$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
        )
)

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

还有其他函数用于处理本地时间,以及将unix时间戳转换为字符串以进行显示。这就是您使用Europe/London时区的地方。

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

date_default_timezone_set("Europe/London");
echo date('Y-m-d H:i:s');

使用";欧洲/伦敦";用date_default_timezone_set((代替BST/GMT/UTC,这可能是处理实例时间的正确方法。这样,在页面实例处于活动状态的整个时间内,时区时间都会保留下来。