2011-01-01 3 views
3

Если я беру текущую временную метку с помощью функции NOW() в MySQL, могу ли я захватить это поле через php и предоставить это время в разных часовых поясах? В основном, преобразование текущего времени в текущий часовой пояс в другой часовой пояс?Временная метка PHP и MySQL

ответ

5

Вы можете использовать DateTimeZone класс:

$gmt = new DateTimeZone("GMT"); 
$datetimeInGMT = new DateTime($now, $gmt); 

Он также принимает места в виде continent/city, например, Europe/London.

Если даты и времени не является UTC, вы можете использовать setTimezone:

$datetimeInGMT = new DateTime($now, new DateTimeZone("America/New_York")); 
$datetimeInGMT->setTimezone(new DateTimeZone("GMT")); 
+0

Правильно, но что, если у меня уже есть временная метка в другом часовом поясе? Могу ли я преобразовать его в другой часовой пояс? – John

+0

@John Попробуйте новый код, который я добавил. – marcog

+0

+1 (и если бы я мог, еще один +1 для 'DateTime'), но не забывайте, что для этого вам нужно знать текущий часовой пояс сервера mySQL, чтобы получить правильную дату начала! Настройка часового пояса MySQL может отличаться от зоны системы. –

3

обработки часовых поясов MySQL является гораздо более сложным, чем РНР. Он обрабатывает простой часовой пояс (EST, PST и т. Д.) И то, что я назову «региональными часовыми поясами» (America/Eastern). Использование региональных зон использует правильное преобразование, включая летнее время, даже когда правила летнего времени менялись с годами.

То, что я сделал, хранит все мои данные как UTC, используя функцию UTC_TIMESTAMP(). Затем в запросах я использую функцию MySQL CONVERT_TZ() для моего целевого часового пояса. http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

Примечание: вам может потребоваться обновить таблицы часовых поясов. http://dev.mysql.com/downloads/timezones.html

+1

С PHP 5, PHP является более сложным из двух: класс 'DateTime' полностью поддерживает часовые пояса. Временная метка «DateTime» может быть установлена ​​и перекрестно преобразована в любую зону. MySQL не может хранить информацию о часовом поясе в поле «DATETIME» вообще. Тем не менее, 'CONVERT_TZ' является допустимым подходом, конечно –

+0

Не обязательно. Прочтите ответ Аарона на этот вопрос http://stackoverflow.com/questions/1646171/mysql-datetime-fields-and-daylight-savings-time-how-do-i-reference-the-extra –

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