Отображать точное местное время на веб-сайте? - PullRequest
6 голосов
/ 28 октября 2008

Меня попросили отобразить «правильное» время на нашем веб-сайте, что, честно говоря, довольно бессмысленно, так как «правильное» можно интерпретировать различными способами.

Наш текущий метод определенно приводит к неточному времени, так как он использует серверный элемент управления, отображающий JavaScript, который запускается по нагрузке, используя дату и время с сервера в качестве параметра, чтобы создать объект часов в JavaScript, который в конечном итоге рендерится на странице, а затем начинает увеличивать Часы. Между обработкой сервера, задержкой в ​​сети и производительностью на стороне клиента (есть много других вещей, работающих под нагрузкой), часы заканчивают время, не соответствующее фактическому времени сервера, и кто знает, по сравнению с клиентским ПК.

Таким образом, чтобы показать «правильное» время, я мог;

  • Используйте локальное время ПК и передайте новый Date () объекту часов JavaScript. Плюсы: должны быть как можно ближе к часам ПК. Минусы: Не уверен, насколько точны часы ПК, не говоря уже о том, в каком часовом поясе.
  • Использование веб-службы для запроса TCP к NTP-серверу для обновления часов на веб-странице. Плюсы: если локальный компьютер также синхронизируется с NTP, он будет точным и наилучшим из возможных совпадений. Минусы: придется обрабатывать все настройки часового пояса относительно наших серверов. Если часы ПК не работают, они все равно будут иметь несоответствие.

Я реализую свой собственный веб-сервис или использую что-то вроде; Инструменты Земли или веб-служба мирового времени ( РЕДАКТИРОВАТЬ: ссылка удалена - теперь 404)

Вот сообщение в блоге от Джона Галлоуэя о веб-сервисе Atomic Clock , которое довольно старое и все же занимает высокое место, когда я гуглю, и он не приходит к выводу.

К счастью, я могу выиграть спор с руководством, почему синхронизация с часами нашего сервера (GMT) не имеет смысла, если вы не в этом часовом поясе и почему нам даже нужно сопоставить локальный ПК.

Есть ли какие-то углы, которые я пропускаю?

Ответы [ 5 ]

2 голосов
/ 28 октября 2008

Мне нужно было показать точное время клиентам в веб-приложении аукциона. Вы можете отправить текущее время сервера вместе со страницей и сразу же инициализировать JavaScript, не дожидаясь загрузки остальной части страницы. Таким образом, вы имеете дело только с задержкой в ​​сети, которая в худшем случае не превышает пары секунд.

После этого вы чертовски близки к точному времени. До тех пор, пока ваш код таймера Javascript написан правильно, вы не будете сильно расшатываться до следующей загрузки страницы. Но я видел много плохого кода часов JS. (Подсказка: дата () хорошая, setTimeout () плохая.)

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

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

1 голос
/ 28 октября 2008

Во-первых, убедитесь, что ваш клиент знает, что в Windows, Linux и OSX есть встроенные часы, которые почти всегда видны пользователям (или сделаны видимыми очень легко). Также убедитесь, что ваш клиент осведомлен о физических часах, которые часто располагаются рядом с любыми киосками, которые могут быть настроены для скрытия встроенных часов от операционной системы.

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

0 голосов
/ 31 октября 2008

Обработка времени в UTC.

  • Пусть пользователи сообщат , какую зону они хотят использовать.
  • Если у ваших пользователей есть постоянные профили, сохраните выбор.
  • Всегда отображать UTC и местное время бок о бок и четко обозначенные.

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

0 голосов
/ 28 октября 2008

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

Это далеко не идеально, особенно с корпоративными пользователями, которые, кажется, подключаются откуда-то, где они не находятся (я живу в Аргентине, но мое рабочее интернет-соединение осуществляется через моего сотрудника, являющегося американской компанией, поэтому каждый веб-сайт предполагает, что я '' м находится в США)

0 голосов
/ 28 октября 2008

вы можете использовать геотаргетинг , чтобы узнать физическое местоположение посетителя веб-сайта, и в вашей базе данных хранится (GMT - XX: XX) зоны, а затем рассчитать время на основе местоположения запрос. это спасет долгую поездку к любому стороннему веб-сервису.

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