Выбор даты jQuery - выпуск TimeZone - PullRequest
6 голосов
/ 23 марта 2011

Мы используем средство выбора даты jQuery на нашем веб-сайте, чтобы выбрать даты и время для бронирования.Календарь в настоящее время установлен на PST, и это вызывает ошибки, когда пользователи пытаются получить доступ из других часовых поясов.Если мы установим сервер на UTC, и приложение автоматически выберет часовой пояс пользователя на основе его IP-адреса.Мне было любопытно, нужно ли нам также включать ручной выбор, поскольку автоматический выбор может потерпеть неудачу (т.е. когда пользователь работает через прокси-сервер).Любой совет будет принята с благодарностью.

Ответы [ 3 ]

7 голосов
/ 25 марта 2011

Пользователь уже выбирает свой часовой пояс в настройках своей ОС. Используйте JavaScript для определения этого часового пояса (не основанного на IP) и передайте его вместе со значением средства выбора даты в приложение на стороне сервера.Вы можете преобразовать местное время в UTC по времени в Javascript или на стороне сервера, в зависимости от того, что вы предпочитаете.Но держите приложение на стороне сервера в UTC, так как это хорошая практика, и внутренне это то, что некоторые языки используют, например, java.util.Date в Java.

2 голосов
/ 23 марта 2011

Рискну предположить, что внешнему интерфейсу вообще не нужно ЛЮБОЕ понимание часовых поясов.

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

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

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

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

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

Если вам нужно только отобразить время в веб-интерфейсе:

  • вычислить время на клиенте в секундах (время Unix), используя Date.getTime () / 1000;соответственно Date.setTime (utc_seconds * 1000);обратите внимание, что Javascript использует миллисекунды
  • время передачи между клиентом и сервером в виде секунд (время Unix)
  • время хранения в виде меток времени UTC (есть вероятность, что ваш бэкэнд поддерживает преобразование в метку времени UTC)

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

  • захватывает часовой пояс клиента (например, используя jsTimezoneDetect ) и сохраните его на сервере
  • используйте захваченный часовой пояс для серверных вычислений для пользователя

Предупреждения:

  • независимо от того, какой механизм, определение местоположения на основе IP несовершенно;Я бы не использовал его для определения часового пояса
  • большинство систем, отличных от Windows, используют базу данных tz ;если ваш сервер - Microsoft, вам может потребоваться преобразовать в стандартные часовые пояса Windows
  • , в то время как обнаружение часовых поясов происходит плохо, что-то может пойти не так, поскольку некоторые юрисдикции изменяют временные пояса ad hoc;
  • для вашего приложения я прогнозирую наибольшую боль при изменении правила часового пояса, если вы поддерживаете повторяющиеся собрания;ОС обычно включают это в пакеты обновлений
  • . Вы можете рассмотреть механизм, позволяющий пользователю вручную установить часовой пояс (возможно, после автоопределения)
...