Как найти дату / время по Гринвичу по названию страны? - PullRequest
13 голосов
/ 14 августа 2010

Как мне найти название страны -> дату / время по Гринвичу, для чего я могу сделать следующее:

Пример:

$datetime = new GMT_search('America');  //output: 2010-01-01 00:00:00    
$datetime = new GMT_search('India');  //output: 2010-01-01 ??:??:??    
$datetime = new GMT_search('China');  //output: 2010-01-01 ??:??:??

Я пытался gmdate(), date_default_timezone_set('Asia/....');ini_set('date.timezone','China'); но это не совсем помогает мне легко найти название страны по Гринвичу.

Может кто-нибудь, пожалуйста, покажите мне пример PHP, который действительно работает?

Спасибо

Ответы [ 4 ]

35 голосов
/ 14 августа 2010

Вы можете искать часовые пояса по стране с помощью DateTimeZone::listIdentifiers.

Пример, чтобы получить часовые пояса в Португалии:

print_r(DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, "PT"));

дает:

Array
(
    [0] => Atlantic/Azores
    [1] => Atlantic/Madeira
    [2] => Europe/Lisbon
)

Затем вы можете сделать:

$d = new DateTime("now", new DateTimeZone("Atlantic/Azores"));
echo $d->format(DateTime::W3C); //2010-08-14T15:22:22+00:00

Как много раз повторялось в этой теме, вы не можете получить один часовой пояс на страну. Страны имеют несколько часовых поясов, и вы заметите, что даже на этой странице даже не выбирается произвольно для некоторых стран, таких как США.

3 голосов
/ 14 августа 2010

Здесь вы найдете полный список часовых поясов, поддерживаемых PHP, которые предназначены для использования, например, с. date_default_timezone_set(). Поддержка стран с несколькими часовыми поясами также удобна для поиска. Возьмите пример американского региона .

<?php
date_default_timezone_set('America/New_York');
echo date('D,F j, Y, h:i:s A');
?>

Список представляет собой полные часовые пояса, поддерживаемые PHP, которые предназначены для использования, например, с. date_default_timezone_set ().

3 голосов
/ 14 августа 2010

Не уверен, что это то, что вы ищете, но PEAR имеет пакет " Date ", в котором есть хороший пример, который, кажется, выполняет то, что вы просите.1005 *

http://pear.php.net/manual/en/package.datetime.date.examples.php (прокрутите вниз до «Преобразование часовых поясов»)

2 голосов
/ 14 августа 2010

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

С помощью этой функции вы можете получить список часовых поясов по континентам / городам: www.php.net/manual/en/function.timezone-identifiers-list.php

Вы можете получить соответствующее смещение из этой функции: www.php.net/manual/en/datetimezone.getoffset.php

Если у вас есть корректное смещение, вы можете использовать gmdate () вместо date (), чтобы получить дату в вашем формате без настройки часового пояса / dst. Просто пройдите время () + настройку, которую вы сохранили: www.php.net/manual/en/function.gmdate.php

Извините, что не публикую ссылки, но мне не хватает кармы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...