【问题标题】:Timezone list with abbreviation, name, and gmt php带有缩写、名称和 gmt php 的时区列表
【发布时间】:2013-09-08 13:33:22
【问题描述】:

我一直在寻找一种方法来显示应该完全像这样的时区列表:

我找到了显示缩写列表的方法,一个带有 gmt 的列表,但是我如何获得像 Central European Time

这样的名称

我只能找到名称如下的列表:欧洲/阿姆斯特丹、欧洲/柏林等。而这正是我不需要的。

确实,我知道我可以进行自定义选择,但我更愿意用 php 创建这样的列表。

【问题讨论】:

  • 我刚刚发现所有东西都是独立的sn-ps。问题主要是,我找不到从 php.ini 中获取“中欧日光”等名称的方法。如果我知道怎么做,我很确定我可以构建一些代码来显示所有这三个。

标签: php list timezone abbreviation


【解决方案1】:

您显示的示例列表看起来像是源自U.S. Naval Observatory's Time Service Dept. 提供的数据。此后,他们将“苏联三区”等名称更新为“俄罗斯联邦三区”。但这些只是一些管理员对他们认为应该命名时区的个人解释。无论如何,它们都不是官方的

如果您在网络上搜索,您会发现许多其他静态网站(如herehere)似乎认为这些网站在某种程度上是官方的并且是一成不变的。事实并非如此。我的意思是,如果你住在俄罗斯,你认为你真的会说你遵循“时区 3”吗?不,您可能会说您遵循“莫斯科时间”或“莫斯科标准时间”。 (参见维基百科在Time in Russia 上的条目。)

这只是一个例子,但问题是从哪里获得时区名称?一般的问题是它们不在the TZDB data 中,所以PHP 不会把它们还给你。正如我已经说明的那样,它们需要进行解释。时区缩写也需要解释。如果您想要稍微好一点的解释,here 提供的解释似乎更合理。但它可能仍需要根据您的目的进行过滤。

更好的时区名称来源来自Unicode CLDR。他们提供了一个非常大的数据集,可以将许多东西翻译成不同的语言,其中包括时区的名称。但是要从 CLDR 数据中的 IANA 时区键中获取时区名称,您必须跳过很多环节:

当然,您必须通过他们的 XML 或 JSON 数据源以编程方式完成所有这些工作。而且您必须针对您感兴趣的每个时区执行此操作。

为什么要这么麻烦?好吧,如果您的用户会说另一种语言,例如法语,那么您想向他们显示“中欧标准时间”还是“heure normale de l'Europe centrale”?只有 CLDR 才能为您提供这种翻译。

所以我知道这并没有直接为您提供可以立即使用的 PHP 代码,但希望现在您明白为什么不能直接使用,而且您遇到的任何列表都受制于某人自己的个人解释,可能已经过时或部分不正确。

【讨论】:

  • 感谢您的时间,马特,它可能为我节省了很多时间。我想我确实对 php 和时区的可能性有一点期望。我认为 im going to rethink my strategy, cause im 绝对不是时区科学家 ;)
  • 这是供用户选择他们的时区吗?如果是这样,我最喜欢的策略是基于地图的选择器,例如 this one。这有点花哨,但它给您的应用带来了现代感,并且对于最终用户而言,比下拉列表更加直观
  • 对于我的一位客户 im building a very complex astrology program, i think i did underestimate the complexity of such programs. Anyway, the list came from another program, but after some research i don't think the names are that important. As long the GMT is correct, so think im 将坚持使用自定义列表,地图 api 从中选择正确的时区。感谢您的努力,最近几天我从我的时区研究中学到了很多东西。
猜你喜欢
  • 2017-09-05
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
相关资源
最近更新 更多