0

我一直在寻找几个小时来找到一种显示时区列表的方法,该列表应该看起来像这样:

在此处输入图像描述

我找到了显示缩写列表的方法,一个带有 gmt 的列表,但是我如何获得像中欧时间这样的名称

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

事实上,我知道我可以进行自定义选择,但我更喜欢用 php 创建这样的列表。

4

1 回答 1

3

您显示的示例列表看起来像是来自美国海军天文台时间服务部提供的数据。此后,他们将“苏联三区”等名称更新为“俄罗斯联邦三区”。但这些只是一些管理员对他们认为应该命名时区的个人解释。他们无论如何都不是官方的。

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

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

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

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

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

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

于 2013-09-08T17:16:32.093 回答