Отображать точное местное время на веб-сайте?

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

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

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

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

Я реализую свой собственный веб-сервис или использую что-то вроде; Earth Tools или World Time Web Service (EDIT: ссылка удалена — теперь 404)

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

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

Любые углы на этом мне не хватает?


person Dave Anderson    schedule 28.10.2008    source источник
comment
Каково назначение часов? Какое разрешение требуется? Секунды? Минуты? Является ли отображение местного часового пояса на стороне клиента?   -  person Ken Gentle    schedule 28.10.2008
comment
Я лично запускаю все в UTC, особенно на серверах: если вы указываете время как 13:47 UTC, путаницы не будет. Если уж на то пошло, то же самое происходит и с системой eBay, использующей PT для всего.   -  person warren    schedule 28.10.2008


Ответы (5)


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

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

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

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

person Sal    schedule 28.10.2008
comment
сетевая задержка, которая в худшем случае вряд ли превысит пару секунд - пара секунд была действительно приемлемой в вашем веб-приложении? - person bzlm; 30.04.2009
comment
Это не идеально, но любому сетевому приложению придется иметь дело с задержкой. Что было важно для аукциона, так это то, что мы позаботились о предотвращении условий гонки или постов, полученных после закрытия по часам сервера. - person Sal; 12.05.2009

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

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

person Illandril    schedule 28.10.2008

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

person Oscar Cabrero    schedule 28.10.2008
comment
Оскар делает важное замечание неочевидным образом: для некоторых часовых поясов существуют нецелочисленные часовые смещения. Я думаю, что все они увеличены на 30 минут, за исключением нескольких действительно сложных шуток. Хотя проверьте это. - person rmeador; 28.10.2008

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

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

person Ricardo Reyes    schedule 28.10.2008

Время обработки в формате UTC.

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

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

person Peter Wone    schedule 31.10.2008