2012-03-06 71 views
4

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

如果我有一个说“300”或“-200”的偏移量,我该如何将它转换为php时区名称?

谢谢!

回答

2

根据定义是不可能的。

几个时区可能具有相同的偏移量(并且它也取决于一年的时间)

+0

啊哈。那么你能推荐跟踪用户时区首选项的最佳方法吗? – ackerchez 2012-03-06 20:56:48

+0

@ackerchez:你可能可以在配置文件设置中获得选择,最常用的时区名称(如大多数论坛引擎) – zerkms 2012-03-06 21:02:38

+0

最好的猜测可能是基于猜测的位置(基于ip或许) – Evert 2012-03-06 21:05:21

4

不幸的是,我遇到了你的问题刚才来了,所以答案似乎晚了一点,但无论如何,我发布它。

您绝对可以将时间偏移量转换为时区名称。基本上,这是通过下面的行的代码进行:

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

其中$offset是时间(小时)的偏移。由于PHP中的一些已知错误/功能,这种简化的方法在某些情况下可能会失败,因此可以在php.net网站上找到解决方法的扩展包装。除此之外,包装还支持夏令时标志。

事实上,正如@zerkms在他的回答中指出的那样,时间偏移和时区名称之间没有一一对应的关系,因为几个时区通常共享相同的偏移量。 该函数返回与给定偏移量对应的第一个找到的时区。第一个确切的是未预定义的。

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

+1

请发布评论,同时downvoting。没有它,人们可能会认为你不了解某些东西。 – Stan 2014-09-26 10:28:44

+0

+1包装 – Samin 2014-11-09 18:07:06

+0

这不考虑夏令时,是吗? – BadCash 2015-09-29 10:13:07

相关问题