如何让数据填充网站上的时区切换器小部件?

时间:2010-09-03 17:33:28

标签: php timezone

任务:

应生成允许网站访问者选择其时区的时区选择器窗口小部件,并填充合理的数据。它应该提供这样的选择:

GMT-11 (HH:MM actual time in that zone)
GMT-10 (...)
GMT-1 (...)
... now for the tricky part:
GMT (...)
GMT+1 (...)
... and then all the way until +12.

当用户选择不同的时区时,服务器应该能够确定要设置的时区。一旦列表填充了正确的数据,第二部分就不是问题了。

问题:

棘手的部分正在获得目前正在全球范围内使用的实际时区。我知道如何获得整个时区列表,以及如何获得它们的偏移量和当前的DST设置。但是,每个时区都有两个变体:常规时间和夏令时。

在上面的列表中,我标记了某些“棘手”的部分。这是欧洲/伦敦这样的时区。在常规时间,欧洲/伦敦=格林威治标准时间,但在夏令时期间,欧洲/伦敦= GMT + 1 ...你能看到问题吗?

让我感到困扰的是,并非所有时区都从DST变为常规时间,反之亦然,因此我不能只使用 -11 = GMT-11,-10 = GMT等通用数据填充列表-10,... 然后只应用一些逻辑来定位具有适当时差的时区,然后将该时区设置为该点的默认值。

我有兴趣了解其他利用此时区切换功能的网站如何根据用户的选择提出时区列表和选择正确时区的逻辑?还有什么你想添加或问的?

2 个答案:

答案 0 :(得分:1)

最常用的时区数据来源是tz/zoneinfo数据库 - 它是免费公开发布的。

正如您已经注意到的那样,时区是一个政治/行政实体,包括基本偏移,DST切换日期,甚至是有关这些变化的历史数据,您需要正确处理历史日期(例如{{ 3}})。

tz数据库(以及使用它的大多数应用程序)因此表示时区不是通过基本偏移,而是通过大陆的名称和使用它的大城市,通常是使用该特定时间的国家的首都区。例如:“欧洲/柏林”或“澳大利亚/达尔文”。

答案 1 :(得分:0)

看看Google Calendar的作用。它显示标准时间偏移量以及城市名称,例如

(GMT+01:00) Tunis

这似乎是一种非常合理的方式来代表他们,我也是。另一方面,我知道有些UI列出了与UTC一起的当前偏移量。无论哪种方式,你都会让人感到困惑,说实话。