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

时间:2016-05-10 18:26:03

标签: php datetime timezone

是否有任何PHP函数可以在时区名称(例如:http://php.net/manual/en/timezones.america.php)和"值"之间进行转换。如东部标准时间,或太平洋夏令时?

不希望在区域之间进行转换,只需获取给出America / New_York(或其他)名称的EST,PDT等名称。 only similar question I found适用于其他语言。

2 个答案:

答案 0 :(得分:2)

如果您安装了PHP Internationalization Package,则可以执行以下操作:

IntlTimeZone::createTimeZone('America/New_York')->getDisplayName()

默认情况下,这将返回CLDR英文标准格式,在这种情况下为"Eastern Standard Time"。您可以找到其他可用选项here。例如:

IntlTimeZone::createTimeZone('Europe/Paris')->getDisplayName(true, IntlTimeZone::DISPLAY_LONG, 'fr_FR')

上述内容将返回"heure avancée d’Europe centrale",这是中欧夏令时的法语。

如果DST对相关日期和时间有效,请小心将第一个参数传递为true,否则为false。这通过以下技术说明:

$tz = 'America/New_York';
$dt = new DateTime('2016-01-01 00:00:00', new DateTimeZone($tz));
$dst = $dt->format('I');
$text = IntlTimeZone::createTimeZone($tz)->getDisplayName($dst);
echo($text); // "Eastern Standard Time"

Working PHP Fiddle Here

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

答案 1 :(得分:1)

如果您知道(http://php.net/manual/en/timezones.america.php)列表中的值,您可以执行类似的操作。

<?php

$dateTime = new DateTime();
$dateTime->setTimeZone(new DateTimeZone('America/New_York'));
echo $dateTime->format('T'); 

?>