Временные метки и часовые пояса PHP/MySQL


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

Author: John, 2011-01-01

2 answers

Вы можете использовать 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"));
 5
Author: marcog, 2011-01-01 09:39:13

Обработка часовых поясов в MySQL намного сложнее, чем в PHP. Он обрабатывает простые часовые пояса (EST, PST и т. Д.) И то, что я буду называть "региональными часовыми поясами" (Америка/Восток). При использовании региональных зон используется правильное преобразование, включая переход на летнее время, даже если правила летнего времени изменились с годами.

Что я сделал, так это сохранил все мои даты и время в формате UTC, используя функцию MySQL 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

 3
Author: spoulson, 2011-01-01 10:12:41