鉴于时区缩写如" EST",我可以得到" America / New York"使用timezone_name_from_abbr
。是否有任何函数返回类似"东部标准时间"?
答案 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个不同的时区
默认的IST对象将引用第一次出现,然后我们将有另外两个对象IST100和IST200来解决爱尔兰和以色列的标准时间。请注意 100 和 200 后缀来自时区的偏移,例如UTC + 1 : 30 为130。
希望此套餐有所帮助,如果需要http://github.com/webit4me/timezone
,请随时标记并提供调整