работа с метками времени с помощью PHP и MySQL - PullRequest
1 голос
/ 10 февраля 2009

Я исследовал временные метки в PHP и MySQL. Я обязуюсь, что временные метки UNIX существуют только в GMT ... суть в том, что вы конвертируете их в часовой пояс пользователя (GMT +/- часовой пояс = локальное время пользователя). Я делаю это успешно, сохраняя временную метку в ее «сырой» форме (как 10-значный длиной int) и преобразовывая ее в местное время в запросе

  $row = $result->fetchRow(DB_FETCHMODE_ASSOC);
    $timestamp = $row['stamp'];
    date_default_timezone_set('America/New_York');
    echo date("d/m/y : H:i:s", $timestamp);

Кажется, это работает нормально, но я не уверен, является ли это "стандартным" способом сделать это. Есть ли у вас опыт этого?

Ответы [ 4 ]

3 голосов
/ 13 февраля 2009

Ваш метод просто отлично:)

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

Лучший способ управления временными метками Unix в MySQL - это, фактически, функция UNIX_TIMESTAMP (). UNIX_TIMESTAMP () без каких-либо аргументов просто возвращает текущее время Unix, а не что-то вроде

$time=time();
mysql_query('UPDATE table SET time='.$time.' WHERE what="ever"');

Вы можете просто сократить лишнюю работу, вставив UNIX_TIMESTAMP прямо в запрос:

mysql_query('UPDATE table SET time=UNIX_TIMESTAMP() WHERE what="ever"');

намного чище!

1 голос
/ 13 февраля 2009

MySQL-сервер хранит даты в формате, независимом от часового пояса (UTC).
Но прежде чем он сохранит дату, он будет конвертирован с использованием своего часового пояса.

U может изменить часовой пояс mysql для каждого соединения * 1:

mysql_query('SET time_zone = "'.$timezone.'"');

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

date_default_timezone_set($timezone);

Если вы установите для них один и тот же часовой пояс, "2009-01-10 13:30:00" будет означать одинаковое значение как для mysql, так и для php.

Но имейте в виду, что 2 сервера имеют разные значения внутренних часов, так что если вы хотите генерировать временные метки на основе текущего времени. Сделайте это в MySQL или php.

* 1) Поддержка часового пояса MySQL может потребовать дополнительной настройки. проверьте руководство

1 голос
/ 10 февраля 2009

Я думаю, что в MySQL нет способа указать часовой пояс поля datetime или timestamp.

Таким образом, вы должны хранить дату и время в своей базе данных, используя один часовой пояс, и конвертировать его в другой при необходимости. Для преобразования вы можете использовать что-то вроде компонента Zend_Date в Zend Framework.

Я думаю, что не существует "стандартного" способа игры с часовым поясом и MySQL, вам нужно выполнить свои собственные настройки.

Для моих клиентов каждый из них работает только в одном часовом поясе, поэтому первое, что я делаю в своем PHP-скрипте, это задаю часовой пояс с date_default_timezone_set, как вы сказали. Но при этом вы должны следить за запросом, используя функцию NOW () (или другие функции даты и времени), поскольку MySQL может установить другой часовой пояс, чем тот, который вы использовали в date_default_timezone_set.

0 голосов
/ 10 февраля 2009

Я установил часовой пояс в php с помощью putenv . Это должно установить часовой пояс для остальной части приложения, если вы работаете на основе GMT. Возможно, есть и другие решения, но это то, что мне показалось наиболее простым, поскольку я не всегда работаю со временем и датой из базы данных.

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