将时区偏移转换为名称

7

我正在使用Javascript来存储用户当前的GMT偏移时区,并希望将其转换为PHP时区名称。

如果我的偏移量是"300"或"-200",我如何将其转换为PHP时区名称?

谢谢!

2个回答

7

很遗憾,我刚刚看到了你的问题,所以答案可能有点晚,但我还是会回答。

你可以将时间偏移量转换为时区名称。基本上,这可以通过以下代码行来执行:

$zoneName = timezone_name_from_abbr('', $offset*3600);

其中$offset是以小时为单位的时间偏移量。这种简化方法可能因PHP中一些已知的错误/功能而失败,因此有一个扩展包装器带有解决方法,可以在php.net网站上找到。除其他外,该包装器还支持夏令时标志。

确实,正如@zerkms在他的答案中所指出的那样,时间偏移和时区名称之间不存在一对一的关系,因为几个时区通常共享相同的偏移量。此函数返回与给定偏移相对应的第一个发现的时区。首先选择哪一个未预定义。

但无论如何,此函数非常方便,可通过date_default_timezone_set为用户会话设置首选时区,后者仅接受时区标识符,但用户可能在Web UI中显示时间偏移量。只要我们知道时间偏移量是正确的,就不关心使用哪个标识符(在幕后)。


1
在给出反对票的同时,请发表一条评论。如果没有评论,人们可能会认为您不理解某些内容。 - Stan
1
这个没有考虑夏令时,对吧? - Magnus
1
你应该这样写:timezone_name_from_abbr('', $offset*3600, 0)。请参考http://php.net/manual/en/function.timezone-name-from-abbr.php。 - Sos.
php.net网站上的解决方法对于-2返回false,如何修复? - Petar Vasilev

3

根据定义,这是不可能的。

几个时区可能具有相同的偏移量(这也取决于一年中的时间)。


啊哈。那么,你能推荐一下跟踪用户时区偏好的最佳方法吗? - ackerchez
@ackerchez:你可能可以在个人资料设置中选择最常见的时区名称(就像大多数论坛引擎一样)。 - zerkms
最好的猜测是根据猜测的位置(例如基于IP)来执行它。 - Evert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接