在 PHP 中获取更长的时区名称
Get longer time zone name in PHP
给定像 "EST" 这样的时区缩写,我可以使用 timezone_name_from_abbr
得到 "America/New York"。有没有 returns 类似 "Eastern Standard Time" 的函数?
一般来说,您不应该信任 timezone_name_from_abbr
函数,因为它只是 return 它找到的具有匹配缩写的 第一个 条目。时区缩写不是唯一的。例如,有 5 个不同的时区共享缩写 "CST"。有关更多歧义示例,请参阅维基百科 this list of abbreviations。
作为 PHP 的特殊情况,考虑缩写 "IST"。人们可能会期望 timezone_name_from_abbr("IST")
到 return "Asia/Kolkata"
,代表印度标准时间。然而,它实际上是 returns "Asia/Jerusalem"
,代表以色列标准时间。两个时区都使用 IST 缩写,但 "Asia/Jerusalem"
按字母顺序排在第一位。
考虑到这一点,您现在应该明白为什么仅给定 "EST" return "Eastern Standard Time" 的函数也不实用。虽然 EST 可能可行,但并非在所有情况下都有效。还要考虑 "Eastern Standard Time" 在 英语 中,并且还有其他缩写和不同语言的文本描述。
有一个项目包含您正在谈论的信息,它来自 Unicode,称为 Common Locale Data Repository(或 CLDR)。使用 CLDR 数据,您将能够编写接受时区标识符(例如 "America/New_York"
)和 language/locale 代码(例如 "en-US"
)和 return 缩写的函数"ET"、"EST" 和 "EDT",以及名称 "Eastern Time"、"Eastern Standard Time" 和 "Eastern Daylight Time"。然后,您需要根据上下文 and/or 您所谈论的具体时间来决定使用哪个名称和缩写。
我已经为 .NET 编写了这样一个库,称为 TimeZoneNames。 PHP 需要类似的东西。我不知道有什么可以推荐给 PHP,但也许有人已经写了一个,或者您可以通过直接使用 CLDR 源数据来创建您需要的函数。
这是我追求了一段时间的东西,看到其他人正在寻找相同的功能,这是我最后一次推送所需的功能:)
webit4me/timezone,是一个 PHP 工具,可以帮助获取给定时区的名称、位置或偏移量。
该工具还为具有类似缩写的时区提供了解决方法。
即在 IST 的 中,我们有 3 个不同的时区
- 印度标准时间 (UTC +5:30)
- 爱尔兰标准时间 (UTC +1:00)
- 以色列标准时间 (UTC +2:00)
默认 IST 对象将引用第一次出现,然后我们将有 2 个对象 IST100 和 IST200 来处理爱尔兰和以色列标准时间。请注意 100 和 200 后缀来自时区的 offsets 例如UTC +1:30 将是 130.
希望这个包会有所帮助,如果需要,请随时加入并做出调整 http://github.com/webit4me/timezone
从缩写中获取更长的名称是不可靠的,但是如果您使用 DateTime 对象,并且在设置默认时区或创建 DateTime 对象时使用长名称。在格式字符串中使用 T 将为您提供 3 个字母的缩写,但您可以获得如下所示的长名称:
date_default_timezone_set('America/Chicago');
$date = new DateTime('2/3/2022 02:11:17');
echo "\n" . $date->format('Y-m-d h:i:s T');
/* Displays 2022-02-03 02:11:17 CST "; */
$t = $date->getTimezone();
echo "\nTimezone: " . $t->getName();
/* Displays Timezone: America/Chicago */
给定像 "EST" 这样的时区缩写,我可以使用 timezone_name_from_abbr
得到 "America/New York"。有没有 returns 类似 "Eastern Standard Time" 的函数?
一般来说,您不应该信任 timezone_name_from_abbr
函数,因为它只是 return 它找到的具有匹配缩写的 第一个 条目。时区缩写不是唯一的。例如,有 5 个不同的时区共享缩写 "CST"。有关更多歧义示例,请参阅维基百科 this list of abbreviations。
作为 PHP 的特殊情况,考虑缩写 "IST"。人们可能会期望 timezone_name_from_abbr("IST")
到 return "Asia/Kolkata"
,代表印度标准时间。然而,它实际上是 returns "Asia/Jerusalem"
,代表以色列标准时间。两个时区都使用 IST 缩写,但 "Asia/Jerusalem"
按字母顺序排在第一位。
考虑到这一点,您现在应该明白为什么仅给定 "EST" return "Eastern Standard Time" 的函数也不实用。虽然 EST 可能可行,但并非在所有情况下都有效。还要考虑 "Eastern Standard Time" 在 英语 中,并且还有其他缩写和不同语言的文本描述。
有一个项目包含您正在谈论的信息,它来自 Unicode,称为 Common Locale Data Repository(或 CLDR)。使用 CLDR 数据,您将能够编写接受时区标识符(例如 "America/New_York"
)和 language/locale 代码(例如 "en-US"
)和 return 缩写的函数"ET"、"EST" 和 "EDT",以及名称 "Eastern Time"、"Eastern Standard Time" 和 "Eastern Daylight Time"。然后,您需要根据上下文 and/or 您所谈论的具体时间来决定使用哪个名称和缩写。
我已经为 .NET 编写了这样一个库,称为 TimeZoneNames。 PHP 需要类似的东西。我不知道有什么可以推荐给 PHP,但也许有人已经写了一个,或者您可以通过直接使用 CLDR 源数据来创建您需要的函数。
这是我追求了一段时间的东西,看到其他人正在寻找相同的功能,这是我最后一次推送所需的功能:)
webit4me/timezone,是一个 PHP 工具,可以帮助获取给定时区的名称、位置或偏移量。
该工具还为具有类似缩写的时区提供了解决方法。
即在 IST 的
- 印度标准时间 (UTC +5:30)
- 爱尔兰标准时间 (UTC +1:00)
- 以色列标准时间 (UTC +2:00)
默认 IST 对象将引用第一次出现,然后我们将有 2 个对象 IST100 和 IST200 来处理爱尔兰和以色列标准时间。请注意 100 和 200 后缀来自时区的 offsets 例如UTC +1:30 将是 130.
希望这个包会有所帮助,如果需要,请随时加入并做出调整 http://github.com/webit4me/timezone
从缩写中获取更长的名称是不可靠的,但是如果您使用 DateTime 对象,并且在设置默认时区或创建 DateTime 对象时使用长名称。在格式字符串中使用 T 将为您提供 3 个字母的缩写,但您可以获得如下所示的长名称:
date_default_timezone_set('America/Chicago');
$date = new DateTime('2/3/2022 02:11:17');
echo "\n" . $date->format('Y-m-d h:i:s T');
/* Displays 2022-02-03 02:11:17 CST "; */
$t = $date->getTimezone();
echo "\nTimezone: " . $t->getName();
/* Displays Timezone: America/Chicago */