PHP - timezone_name_from_abbr 显示错误的时区

标签 php mysql timezone

对于我用 PHP 构建的在线社区,我需要将默认时区设置为用户的时区。这是我现在的代码,它根据一些 JS 返回用户的时区偏移量:

$timezone = $_SESSION['time'];
$timezone_offset = filter_var($timezone, FILTER_SANITIZE_NUMBER_INT);

该脚本将时区偏移量放入 session 中,然后将该 session 分配给 $timezone 变量。当我 echo $timezone 时,我得到“GMT 2”,这是正确的,所以我确保我只得到数字 2 在以下代码中使用来获取和设置时区:

$timezoneName = timezone_name_from_abbr("", $timezone_offset*3600, false);
date_default_timezone_set($timezoneName);

虽然 $timezone 变量显示了我所在位置的正确时区偏移:GMT +2(我在比利时布鲁塞尔),但当我使用 date_default_timezone_get()< 回显我的默认时区时,我仍然得到错误的时区,即 Europe/Helsinki,其偏移量为 GMT +3,而不是 GMT +2。

有谁知道可能导致此问题的原因以及如何修复它,以便它显示正确的时区:欧洲/布鲁塞尔或欧洲/巴黎。

最佳答案

“GMT +2”并不是“欧洲/布鲁塞尔”的准确时区:由于夏令时,它是实际时区。 “欧洲/布鲁塞尔”的标准时区是“GMT +1”。

因此,要获得正确的日期,您必须将 $_SESSION['time'] 设置为“GMT +1”或“CET”(中欧时间):通过这种方式,您全年都会有合适的时间。

但是,最好的方法是直接指定“欧洲/布鲁塞尔”,因为每个国家/地区的 DST 设置可能会发生变化(实际上,CET DST 规则是由欧盟审议的)。

关于PHP - timezone_name_from_abbr 显示错误的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36922781/

相关文章:

php - 分配一个等于 Include 函数内容的变量

postgresql - 将 UTC 时间戳转换为 timestamptz

postgresql - 将时区添加到 PostgreSQL 中的时间戳(不转换为该时区)

javascript - 如果选择此选项并且此选项更改为 3 选项

PHP PDO SQLite。事务和更新问题

php - 使用 PHP SimpleXML 选择具有特定名称的所有节点 - 附上源代码

mysql - 无法通过套接字 '/run/mysqld/mysqld.sock' 连接到本地 MySql 服务器 (2)

mysql 在处理 float 时,max 函数返回的不是精确值?

mysql - 从日期获取 DayOfQuarter

javascript - 如何将日期从一个时区转换为另一个时区