在PHP中获取更长的时区名称

时间:2015-06-19 18:02:08

标签: php timezone abbreviation

鉴于时区缩写如" EST",我可以得到" America / New York"使用timezone_name_from_abbr。是否有任何函数返回类似"东部标准时间"?

2 个答案:

答案 0 :(得分:3)

通常,您不应该信任timezone_name_from_abbr函数,因为它只返回它找到的带有匹配缩写的第一个条目。时区缩写不是唯一的。例如,有5个不同的时区共享缩写" CST"。有关含糊不清的更多示例,请参阅维基百科上的this list of abbreviations

作为PHP的特定情况,请考虑缩写" IST"。人们可能希望timezone_name_from_abbr("IST")返回"Asia/Kolkata",代表印度标准时间。但是,它实际上返回"Asia/Jerusalem",代表以色列标准时间。两个时区都使用IST缩写,但"Asia/Jerusalem"首先按字母顺序排列。

考虑到这一点,您现在应该明白为什么函数返回"东部标准时间"仅给出" EST"。虽然它可能适用于EST,但它在所有情况下都不会起作用。还要考虑"东部标准时间"在英语中,还有其他缩写和不同语言的文字说明。

有一个项目包含您正在谈论的信息,该信息来自Unicode,并称为Common Locale Data Repository(或CLDR)。使用CLDR数据,您将能够编写接受时区标识符(例如"America/New_York")和语言/区域设置代码(例如"en-US")的函数,并返回缩写" ET&# 34;," EST"和#34; EDT"和名称"东部时间","东部标准时间"和"东部夏令时"。然后,您需要根据您所讨论的上下文和/或特定时间来决定使用哪个名称和缩写。

我已经为.NET编写了这样一个名为TimeZoneNames的库。你需要类似PHP的东西。我不知道要为PHP推荐一个特定的那个,但也许有人写了一个,或者你可以通过直接消费CLDR源数据来创建你需要的功能。

答案 1 :(得分:2)

这是我追求的一段时间,并且看到其他人正在寻找相同的功能,这是最后一次所需的推动:)

webit4me/timezone,是一个PHP工具,可以帮助获取给定时区的名称,位置或偏移量。

该工具还为具有类似缩写的时区提供了一种解决方法。

即。在Matt's example的IST,我们有3个不同的时区

  1. 印度标准时间(UTC +5:30)
  2. 爱尔兰标准时间(UTC +1:00)
  3. 以色列标准时间(UTC +2:00)
  4. 默认的IST对象将引用第一次出现,然后我们将有另外两个对象IST100和IST200来解决爱尔兰和以色列的标准时间。请注意 100 200 后缀来自时区的偏移,例如UTC + 1 30 为130。

    希望此套餐有所帮助,如果需要http://github.com/webit4me/timezone

    ,请随时标记并提供调整