Вопрос

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

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

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

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

Внедряю ли я свой собственный веб-сервис или использую что-то вроде; Земельные инструменты или веб -сервис Мирового времени (Редактировать: ссылка удалена - теперь 404)

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

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

Какие-нибудь соображения по этому поводу я упускаю?

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

Обрабатывайте время в UTC.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top