PHP 时区问题 |英国夏令时和格林威治标准时间
Posted
技术标签:
【中文标题】PHP 时区问题 |英国夏令时和格林威治标准时间【英文标题】:PHP timezone issue | BST and GMT 【发布时间】:2015-08-09 06:30:05 【问题描述】:我开发了一个应用程序,它记录某些记录何时被修改和创建,所以基本上我们使用time()
函数来记录何时保存更改。
我在英国,所以我的时区必须是 GMT。但是在英国,我们使用 DST,所以在夏天我们不再使用 GMT,而是使用 BST。
如何更改时区以使用 BST(即 GMT +1)。我想在我的 php 文件中声明它,以便轻松更改它。这是我目前拥有的:
date_default_timezone_set("UTC");
当我将其更改为:
date_default_timezone_set("BST");
我收到一个 php 错误 Timezone ID 'BST' is invalid
,当我将其更改为欧洲/伦敦时,它仍然保持为 GMT 而不是 BST
【问题讨论】:
那么 date_default_timezone_set('Etc/GMT-1'); 【参考方案1】:您将时区设置为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
)
)
【讨论】:
如前所述,我已将其更改为欧洲/伦敦,但它仍在使用 GMT 而不是 BST(晚一小时) 那么你可能需要update your timezone db。如果它已经过时并且现实世界中的时区定义发生了变化,那么您的 PHP 将没有此信息。 您能否了解一下我应该将这些文件插入时区数据库中的哪个位置?谢谢 见***.com/questions/3564478/…。您应该使用 PECL 来更新timezonedb
扩展。 但是,根据您安装 PHP 的方式,可能会有更好的方法。例如,您可能应该使用安装 PHP 的包管理器来全面更新您的 PHP 版本。这太宽泛了,无法在评论中正确回答。
在很长一段时间内Europe/London
没有任何改变。【参考方案2】:
time()
函数返回一个 unix 时间戳,该时间戳始终基于 UTC(与 GMT 相同)。为 BST 或任何其他时区调整它是无效的。
还有其他函数用于处理本地时间,以及将 unix 时间戳转换为字符串以进行显示。那是您使用Europe/London
时区的地方。
BST
无效,因为它可能代表“孟加拉国标准时间”或其他几个时区。一般来说,不要依赖时区缩写。
【讨论】:
以上是关于PHP 时区问题 |英国夏令时和格林威治标准时间的主要内容,如果未能解决你的问题,请参考以下文章