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

Chr*_*ton 3 php timezone abbreviation

给定像“EST”这样的时区缩写,我可以使用timezone_name_from_abbr. 是否有返回“东部标准时间”之类的函数?

Mat*_*int 5

通常,您不应信任该timezone_name_from_abbr函数,因为它只返回找到的具有匹配缩写的第一个条目。时区缩写不是唯一的。例如,有 5 个不同的时区共享缩写“CST”。有关歧义的更多示例,请参阅维基百科上的缩写列表

作为 PHP 的一个特定案例,请考虑缩写“IST”。人们可能希望timezone_name_from_abbr("IST")返回"Asia/Kolkata",代表印度标准时间。然而,它实际上返回"Asia/Jerusalem",代表以色列标准时间。两个时区都使用 IST 缩写,但"Asia/Jerusalem"按字母顺序排在第一位。

考虑到这一点,您现在应该明白为什么函数返回仅给出“EST”的“东部标准时间”也是不切实际的。虽然它可能适用于 EST,但并非在所有情况下都有效。还要考虑到“Eastern Standard Time”是英文的,还有其他不同语言的缩写和文字说明。

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

我为 .NET 编写了一个名为TimeZoneNames的库。PHP 需要类似的东西。我不知道为 PHP 推荐哪个特定的,但也许有人已经写了一个,或者您可以通过直接使用 CLDR 源数据来创建您需要的函数。