Как получить имена и аббревиатуры часового пояса в PHP?

Начиная с идентификатора часового пояса, такого как "America/Los_Angeles", как вы находите имена и аббревиатуры этого часового пояса в PHP? Например:

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

Если бы я мог получить только короткую аббревиатуру ( "PST" и "PDT" ), это было бы нормально.

Я просмотрел DateTimeZone::listAbbreviations() и попытался проверить это, чтобы увидеть, что соответствует моему id, однако для America/Los_Angeles это находит "PST", "PDT", "PPT" и "PWT", что немного любопытно.

Ответ 1

Надеюсь, это поможет:

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 ( 'Америка/New_York');

И вы получите:

EDT

Ответ 2

надеюсь, что это поможет вам

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

Ответ 3

Надеюсь, это поможет вам

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

Ответ 4

Похоже, у Симфонии есть методы для этого, например. select_timezone_tag. Вы можете проверить их исходный код, чтобы узнать, как это делается.

Ответ 5

Дело в том, что название часового пояса зависит от времени года, например, зимой его 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