如何在PHP中获取时区的名称和缩写?

时间:2011-03-19 14:15:39

标签: php timezone

从时区标识符开始,例如"America/Los_Angeles",如何在PHP中找到该时区的名称和缩写?例如:

'PST', 'Pacific Standard Time', 'PDT', 'Pacific Daylight Time'

如果我只能获得短缩写('PST'和'PDT'),那就没问题了。

我看了DateTimeZone::listAbbreviations(),并试着检查一下,看看哪个与我的id相对应,但是对于America / Los_Angeles,它找到“PST”,“PDT”,“PPT”和“PWT”哪个有点好奇。

5 个答案:

答案 0 :(得分:11)

希望这会对你有所帮助

<?php
    date_default_timezone_set('Europe/Sofia');
    echo date_default_timezone_get(); // Europe/Sofia
    echo ' => '.date('T'); // => EET
?>

答案 1 :(得分:11)

我希望这会有所帮助:

function get_timezone_abbreviation($timezone_id)
{
    if($timezone_id){
        $abb_list = timezone_abbreviations_list();

        $abb_array = array();
        foreach ($abb_list as $abb_key => $abb_val) {
            foreach ($abb_val as $key => $value) {
                $value['abb'] = $abb_key;
                array_push($abb_array, $value);
            }
        }

        foreach ($abb_array as $key => $value) {
            if($value['timezone_id'] == $timezone_id){
                return strtoupper($value['abb']);
            }
        }
    }
    return FALSE;
}

get_timezone_abbreviation(&#39;美国/纽约&#39);

你得到:

EDT

答案 2 :(得分:7)

希望这会对你有所帮助

<?php
$dateTime = new DateTime();
$dateTime->setTimeZone(new DateTimeZone('America/Havana'));
echo $dateTime->format('T');
?>

答案 3 :(得分:1)

看起来Symphony有这方面的方法,例如select_timezone_tag。您可以查看their source code,看看它是如何完成的。

答案 4 :(得分:1)

问题是,时区名称取决于一年中的时间,例如冬天是CET,夏天是CEST。

我们可以使用当前日期和时间获取时区的名称。

$timezone = 'Pacific/Midway';
$dt = new DateTime('now', new DateTimeZone($timezone));
$abbreviation = $dt->format('T'); // SST

它只支持php知道的时区,它不知道“太平洋标准时间”是什么。

在这里你可以看到它如何在CET和CEST之间切换

    $t = new CDateTime('2015-09-22 11:00', new DateTimeZone('CET'));
    $t->format('T'); // CEST

    $t = new CDateTime('2015-12-22 11:00', new DateTimeZone('CET'));
    $t->format('T'); // CET