有没有一种简单的方法来呈现时区选项,同时仍保持准确的时区转换?

时间:2014-06-03 18:27:51

标签: php timezone

我对如何处理时区转换感到有点困惑。

我们正在建立一个已安排节目的网站,并希望根据所选时区向用户显示正确的节目时间。

我们使用的时区值来自

select * from tz_zone order by zone_name asc;

示例值如下所示:

Africa/Abidjan
...
America/Antigua
America/Araguaina
America/Argentina/Buenos_Aires
America/Indiana/Indianapolis
America/Los_Angeles
...
Antarctica/Casey
...
Asia/Aden
...
Atlantic/Azores
...
Europe/Andorra
...

正如您所看到的,这些值对于人们来说并不容易理解。

传统上,我们看到简化的列表如太平洋的-8:00 UTC,我认为人们普遍理解这一点,但我对它的运作方式感到有些困惑。

当我们查看DST之类的东西时,我们知道不是每个地方都会观察它(例如,亚利桑那州等)

要进行时区转换,我们会以UTC格式存储数据并运行以下内容:

select convert_tz(show_time, 'UTC', 'America/Los_Angeles') as show_time from shows

对于像加利福尼亚那样观察夏令时的州,一年中的部分时间他们将是-8,然后是一年中的部分时间-7。如果我们将值存储为-8,这是否意味着半年,他们的节目时间是错误的?

1 个答案:

答案 0 :(得分:2)

如果您只存储-8,那么夏令时之后的部分时间将会出错。

每个时区的夏令时转换点的具体日期和时间通常不同。如果您想要美国太平洋时区的实际行为,则必须使用"America/Los_Angeles"

另请参阅the timezone tag wiki中的“时区!=偏移”。

如果您正在寻找一种更直观的方式让用户选择时区,请考虑使用基于地图的时区选择器,例如this onethis one