2016-05-10 2 views
1

Есть ли функция PHP в любом месте, которая преобразует имя часового пояса (например, найденное здесь: http://php.net/manual/en/timezones.america.php) и «значение», например, «Восточное стандартное время» или «Тихоокеанское дневное время»?PHP: Как получить значение часового пояса (например: Восточное стандартное время) от имени часового пояса (например: America/New_York)?

Не желая конвертировать между зонами, просто введите имена EST, PDT и т. Д., Учитывая имя America/New_York (или другое). only similar question I found предназначен для другого языка.

+0

С какой целью? На каком языке? Пожалуйста, дополните. –

+0

Почему цель имеет значение? Язык - это PHP, отсюда заголовок, первый абзац и тег. – Bing

+0

Я имел в виду, вы показываете это пользователю? На английском? Или вы передаете значение в другой API? –

ответ

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", который французский язык для Центральной Европы летнее время.

Будьте осторожны, чтобы передать первый параметр как true, если DST действует в отношении даты и времени, или 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

Если вы знаете значение из своего списка по адресу (http://php.net/manual/en/timezones.america.php), вы можете сделать что-то вроде.

<?php 

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

?> 
+0

Это ПОЧТИ, что я просил, поскольку T дает сокращения, но не выписано. Однако я не вижу длинной формы. (Кроме того, похоже, что это было найдено здесь, для тех, кто ищет: http://php.net/manual/en/function.timezone-abbreviations-list.php) – Bing

Смежные вопросы