Начиная с идентификатора часового пояса, например "America/Los_Angeles"
, как вы находите имена и аббревиатуры этого часового пояса в PHP? Например:
'PST', 'Pacific Standard Time', 'PDT', 'Pacific Daylight Time'
Если бы я мог получить только короткую аббревиатуру («PST» и «PDT»), это было бы нормально.
Я просмотрел DateTimeZone::listAbbreviations()
и попытался проверить, что посмотреть, которые соответствуют моему id, однако для America / Los_Angeles он находит «PST», «PDT», «PPT» и «PWT», что немного любопытно.
Надеюсь, это поможет:
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');
И вы получаете:
По восточному времени
Надеюсь, что это поможет вам
<?php date_default_timezone_set('Europe/Sofia'); echo date_default_timezone_get(); // Europe/Sofia echo ' => '.date('T'); // => EET ?>
Надеюсь, что это поможет вам
<?php $dateTime = new DateTime(); $dateTime->setTimeZone(new DateTimeZone('America/Havana')); echo $dateTime->format('T'); ?>
Похоже, у Симфонии есть методы для этого, например select_timezone_tag. Вы можете проверить их исходный код, чтобы узнать, как это делается.
Дело в том, что название часового пояса зависит от времени года, например, зимой это 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