对于我在PHP中构建的在线社区,我需要将默认时区设置为用户的时区。这是我现在的代码,它根据一些JS返回用户的时区偏移:
$timezone = $_SESSION['time'];
$timezone_offset = filter_var($timezone, FILTER_SANITIZE_NUMBER_INT);
脚本将时区偏移量放入会话中,然后将此会话分配给$ timezone变量。当我回复$ 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()
回显我的默认时区时,我仍然得到错误的时区,即欧洲/赫尔辛基,其GMT +3偏移,而不是GMT +2。
是否有人知道可能导致此问题的原因以及如何解决此问题,以便显示正确的时区,欧洲/布鲁塞尔或欧洲/巴黎。
答案 0 :(得分:1)
“GMT +2”并非 “欧洲/布鲁塞尔”的时区:由于夏令时,它是实际时区。 “欧洲/布鲁塞尔”的标准时区是“GMT +1”。
因此,要获得正确的日期,您必须将$_SESSION['time']
设置为“GMT +1”或“CET”(中欧时间):通过这种方式,您将获得全年的正确时间
但是,最好的方法是直接指定“欧洲/布鲁塞尔”,因为每个国家/地区的夏令时设置都可以更改(实际上,欧盟审议了CET DST规则)。