преобразование даты / времени из местного времени пользователя в UTC на сайте - PullRequest
6 голосов
/ 14 апреля 2011

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

Проблема, с которой я столкнулся, заключается в преобразовании местного времени пользователя в UTC.Я видел другие посты, посвященные этой проблеме, предоставляя UTC пользователю и заставляя клиента (js) преобразовывать время в местное время и из него.Однако у меня есть доступ к соответствующей системе, которую я могу использовать для преобразования даты на стороне сервера на основе предпочтений часового пояса пользователя.

У меня такой вопрос: следует ли использовать преобразование на стороне сервера, котороепозволил бы указать домашнее местное время пользователя (скажем, его время в США, независимо от того, где он вошел в систему), или я должен использовать преобразование на стороне клиента?

У кого-нибудь естьлюбой опыт с этим?Каковы некоторые из менее очевидных преимуществ / недостатков каждого метода?

Ответы [ 2 ]

11 голосов
/ 14 апреля 2011

Хранить все в UTC - очень хорошая идея, и я рекомендую придерживаться этого.

Существует несколько подходов, которые вы можете использовать.Я предполагаю, что у вас будут профили пользователя.Вы можете решить дать пользователям возможность выбрать часовой пояс, который они предпочитают, и отображать все, используя эту информацию.А также обрабатывать все пользовательские вводы соответствующим образом (преобразовать на стороне сервера, предполагая, что часовой пояс предпочтительнее).

Другой способ справиться с этим - фактически принять смещение часового пояса пользователя через Date.getTimeZoneOffset() и отправить егокаким-либо образом на ваш сервер (т.е. через скрытое поле формы или Ajax).Когда вы это знаете, показывать все во время пользователя было бы просто.В этом случае вам может потребоваться преобразовать дату / время на клиенте и отправить его в формате UTC (или использовать скрытое поле формы со смещением часового пояса).

В обоих случаях вы выполняете преобразование даты в базе данных на стороне сервера.Это лучший подход из моего опыта.Я хотел бы отметить, что помимо простого преобразования часовых поясов вам, вероятно, следует подумать о отображении даты / времени в правильном формате (т.е. в зависимости от значения заголовка AcceptLanguage).

1 голос
/ 14 апреля 2011

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

Если параметр домашнего времени является дополнительным в профиле (тот, который большое количество пользователей не настроит должным образом), то вам следует использовать время на стороне клиента.

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

Если оба из них применимы к вам, они прокляты, если вы делаете, и прокляты, если вы этого не делаете.

Если ни один из них не применим, оба решения дадут равные, удовлетворительные результаты.

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

...