PHP:如何从时区名称(例如:America/New_York)获取时区值(例如:东部标准时间)?

Bin*_*ing 5 php timezone datetime

是否有 PHP 函数可以在时区名称(例如此处找到的名称: http: //php.net/manual/en/timezones.america.php)和“值”(例如东部标准时间或太平洋时间)之间进行转换夏令时?

不想在区域之间进行转换,只需获取给定 America/New_York(或其他)名称的 EST、PDT 等名称。我发现的唯一类似的问题是针对不同的语言。

Mat*_*int 5

如果您安装了PHP 国际化包,您可以执行以下操作:

\n\n
IntlTimeZone::createTimeZone(\'America/New_York\')->getDisplayName()\n
Run Code Online (Sandbox Code Playgroud)\n\n

默认情况下,这将返回CLDR英语标准长形式,在本例中就是如此"Eastern Standard Time"您可以在此处找到其他可用选项。例如:

\n\n
IntlTimeZone::createTimeZone(\'Europe/Paris\')->getDisplayName(true, IntlTimeZone::DISPLAY_LONG, \'fr_FR\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

以上将返回"heure avanc\xc3\xa9e d\xe2\x80\x99Europe centrale"中欧夏令时的法语。

\n\n

请小心传递第一个参数,就好像trueDST 对相关日期和时间有效,否则false。这可以通过以下技术来说明:

\n\n
$tz = \'America/New_York\';\n$dt = new DateTime(\'2016-01-01 00:00:00\', new DateTimeZone($tz));\n$dst = $dt->format(\'I\');\n$text = IntlTimeZone::createTimeZone($tz)->getDisplayName($dst);\necho($text); // "Eastern Standard Time"\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这里使用 PHP Fiddle

\n\n

请注意,这些字符串旨在显示给最终用户。如果您的目的是将它们用于某些编程目的,例如调用另一个 API,那么它们是不合适的 - 即使某些字符串的英文版本碰巧对齐。例如,如果您要将时区发送到 Windows 或 .NET API,或者发送到 Ruby on Rails API,这些字符串将不起作用。

\n