2008-10-07 3 views
5

У меня есть веб-приложение с несколькими часовыми поясами, которое хранит все значения datetime в UTC в базе данных, когда действия происходят на сервере, я могу легко преобразовать время в UTC.Каков наилучший способ обнаружения и хранения часового пояса, в котором находится клиент веб-приложения?

Однако, когда клиент входит в промежуток времени или промежуток времени, что является лучшим способом для его обнаружения и хранения?

В настоящее время я делаю следующее:

  1. Получить значение Date.getTimezoneOffset() (JavaScript)
  2. сообщение, что код на стороне сервера через ICallbackEventHandler на стр.
  3. Сохраните это значение в сеансе
  4. По любому последующему запросу вычислите значение даты/времени вывода/ввода, используя часовой пояс клиента.

Независимо от фактической реализации, это похоже на элегантное решение. У кого-нибудь есть лучший метод?

ответ

4

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

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

Единственные проблемы, которые я вижу с помощью этого метода, это то, что a) у меня нет реальной хорошей процедуры форматирования даты и времени еще в javascript, и b) если пользователь отключил JavaScript, то он не работает ,

+0

Это изящное решение, и один я считал. Единственная причина, по которой я уклонился от него, - это сценарий «таймера обратного отсчета», например, когда пользователю осталось X часов для выполнения действия. Мне казалось, что эта логика должна произойти на сервере, но я думаю, что это будет хорошо в javascript. – 2008-10-09 16:23:31

+0

Все, что ограничено для пользователя, обязательно должно быть проверено на сервере. Кажется, что таймер обратного отсчета связан с этим вопросом: http://stackoverflow.com/questions/198049/prevent-js-alert-from-pausing-timers Это похоже на то, что проверка на стороне клиента уязвима для обмана. – Mnebuerquo 2008-10-15 07:35:33

2

Вы можете использовать свойство «header» объекта HttpRequest для запроса заголовка «If-Modified-Since», отправленного клиентом. Этот заголовок должен содержать дату в формате, который включает в себя временную зону клиента, например:

If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT 

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

С уважением, Фабрицио

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

  • Нет связанных вопросов^_^