MySQL: сохранить часовой пояс сервера или часовой пояс пользователя? - PullRequest
8 голосов
/ 05 декабря 2009

Я собираюсь сохранить даты при входе пользователя в систему на моем сайте, но я не знаю, какое решение является наиболее логичным.

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

<?php
// my server has for example America/New_York timezone
$user_timezone = "Europe/Rome";
date_default_timezone_set ($user_timezone);
$date = date ('Y-m-d H:i:s');
$sql = "UPDATE users SET user_last_modify = '$date', user_timezone = '$user_timezone' WHERE user_id = 'some id' LIMIT 1;";
$res = mysql_query ($sql);
?>

Мой вопрос: как лучше всего сохранить часовой пояс сервера или использовать часовой пояс пользователя?
и если я использую часовой пояс пользователя, должен ли я сохранить имя часового пояса, как в моем примере?

Ответы [ 3 ]

14 голосов
/ 05 декабря 2009

Я бы рекомендовал использовать часовой пояс сервера или UTC, а не хранить разные данные для каждого пользователя. Таким образом, ваша база данных будет полностью согласованной, и вы сможете выполнять некоторые операции, например сравнения, без необходимости извлекать для каждой записи столбец user_timezone и выполнять преобразование (которое не является полностью бесплатным)

2 голосов
/ 07 декабря 2009

Использование UTC . Это избавит вас от многих часов разочарования.

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

Даже если использование часового пояса сервера может быть заманчивым, правила DST могут измениться в очень коротком уведомлении (см .: Argentina DST 2009 - правительство приняло решение не использовать DST, около 1 недели до того, как это должно было произойти); в некоторых случаях сам часовой пояс может измениться (см. Время в Индиане ). Определение UTC вряд ли претерпит такие радикальные изменения.

(Рассказ о серверном и местном времени: сервер был на западном побережье США, перенес его на восточное побережье США; приложения использовали серверное время; все чертовски свободно. Благодаря виртуализации можно легко и быстро перемещать серверы на разные континенты .)

1 голос
/ 05 декабря 2009

Просто используйте:

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