Отображение даты и времени в GMT на сервере в PHP - PullRequest
2 голосов
/ 15 марта 2011

У меня есть веб-сайт, на котором все записи вставляются в соответствии с датой и временем сервера, что примерно на 6 часов позже GMT.Я хочу отображать эти даты в GMT без изменения даты и времени вставки.Я имею в виду, есть ли какие-либо глобальные настройки в PHP, которые позволят мне отображать дату и время по Гринвичу, не затрагивая каждую строку, где я показываю дату и время?И я также не хочу менять скрипт вставки, который будет продолжать вставлять дату и время в соответствии с текущим часовым поясом.

Спасибо

Ответы [ 3 ]

2 голосов
/ 15 марта 2011

К сожалению, для PHP есть только одна глобальная настройка часового пояса:

; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = America/Los_Angeles

Это влияет как на синтаксический анализ, так и на рендеринг, поэтому изменение этого значения повлияет на все ваши даты.

Если вы просто заботитесь об отображении, вы можете использовать функцию gmdate() для отображения дат по Гринвичу. Он работает точно так же, как и функция date(), за исключением того, что он отображает даты в GMT. См. документацию gmdate для получения более подробной информации.

1 голос
/ 15 марта 2011

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

Я бы рекомендовал использовать объект DateTIme, так как он предлагает максимальную простоту и гибкость.


Использование DateTime Объект

Вы не должны ничего делать при создании DateTime, поэтому он создает его с часовым поясом сервера, но тогда вам нужно вызвать setTimezone .

Вот пример:

// Could just call this once, and use a reference to it.
$timezone = new DateTimeZone('GMT');

$insertDate = new DateTime($row['insertDate']);
$insertDate->setTimezone($timezone);

Теперь $insertDate будет в часовом поясе GMT, преобразованном из часового пояса вашего сервера.


Использование процедурных Функции даты / времени

Если вы хотите использовать процедурные функции, в вашем случае вы можете использовать gmdate или если вам нужен другой часовой пояс, отличный от GMT, вам придется постоянно менять часовой пояс по умолчанию, используя date_default_timezone_set

// Storing so you can restore the current default
$serverTimezone = date_default_timezone_get();

/** 
 * Get the unix timestamp for the insertDate
 * This converts from the default timezone to UTC
 */
$insertDate = strtotime($row['insertDate']);


date_default_timezone_set('GMT');

/**
 * This displays the date in the new default timezone GMT, based
 * on the UTC timezone of the unix timestamp
 */
echo date('Y-m-d H:i:s', $insertDate);

// Reset the timezone
date_default_timezone_set($serverTimezone);

Это можно абстрагировать в свою собственную функцию, чтобы избавить вас от хлопот.


Использование gmdate - работает только для GMT

Концепция, аналогичная процедурному примеру, показанному выше, за исключением того, что нам не нужно играть с часовым поясом по умолчанию.

/** 
 * Get the unix timestamp for the insertDate
 * This converts from the default timezone to UTC
 */
$insertDate = strtotime($row['insertDate']);

/**
 * This displays the date in GMT, based
 * on the UTC timezone of the unix timestamp
 */
echo gmdate('Y-m-d H:i:s', $insertDate);
0 голосов
/ 15 марта 2011

Использование date.timezone

Добавьте в свой php.ini следующую строку:

date.timezone = "Etc/GMT-6"

Чтобы увидеть все возможные форматы, проверьте это

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