2013-09-04 3 views
0

В моей БД я храню последнюю дату/время входа пользователя, используя СЕЙЧАС(). Я понимаю, что эти магазины используют мой часовой пояс серверов, с которыми у меня нет проблем. Хотя я планирую использовать это для своих целей (они говорят, что они никогда не вошли в систему или yada yada), я также хочу иметь возможность отображать это последнее время входа в их профиль, чтобы они могли их видеть.sql СЕЙЧАС() и возврат фактического часового пояса пользователей?

Что было бы лучше всего для этого? На данный момент я думаю, что я должен просто позволить им выбирать/редактировать часовой пояс из своего профиля, а затем это, в свою очередь, преобразует значение NOW(), хранящееся в БД, в свое время. Для этого потребуется еще один столбец в БД, но я бы сделал правильный расчет для своего времени, а также перечислил текущий часовой пояс, который они выбрали для своего профиля.

Например, я нахожусь в таком состоянии, чтобы показать их в профиле учетной записи 2013-09-04 02:46:05 EST, но также позволяет редактировать их часовой пояс, чтобы исправить его для отображения, сохраняя при этом исходная дата в БД (мои настройки сервера tz).

Я понимаю, что предоставление пользователю последней даты/времени входа кажется бесполезным, но для этого сайта он действительно будет иметь для них некоторое значение, поэтому я хочу убедиться, что он отражает «их» время и имеет смысл для них ,

Это лучшая практика или лучшие идеи?

+1

Возьмите прочитанный на 'timestamp' тузд типа – zerkms

ответ

1

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

Я настоятельно рекомендую вам хранить время входа в систему по UTC (от getutcdate()), так как это однозначно. Если вы используете локальное время, переход на летнее время приводит к «повторным часам», когда одно и то же время будет записано для событий, которые происходят на один час. Это делает невозможным определение времени события.

Если вы не знаете часовой пояс пользователя, просто покажите UTC и сообщите пользователю, что это UTC, чтобы они не были смущены.

Однако, если вы хотите узнать часовой пояс пользователя, вы должны получить клиентское программное обеспечение, чтобы рассказать вам, возможно, попросив пользователя и сохранив его в своих настройках. В качестве альтернативы вы можете угадать JavaScript.

Смотрите также на этот вопрос, в котором обсуждается вопрос часового пояса более подробно:

+0

данных я понимаю все, что вы сказали .. и да, я понимаю, что нет возможности автоматически узнать пользователей tz. Мне просто интересно, было ли лучше всего разрешить им выбирать свой часовой пояс в своем профиле пользователя, а затем отображать его. Если они не выбрали, это будет только UTC. – user756659

+0

@ user756659, я бы сказал, что это приятно иметь и, возможно, важно в подобной Facebook среде, где пользовательский опыт более важен, чем то, что он на самом деле делает, но не является существенным в продуктах, ориентированных на бизнес, где вы можете потребовать немного больше пользователя. – Ben

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