Intereting Posts
Как мы можем получить доступ к определенным данным учетной записи Google Analytics с помощью API? пытается создать SQL-соединение на нескольких таблицах замена pdo in для проблем mysql Назначить ссылку на статическую переменную PHP PCNTL – что делает параметр pcntl_signal () restart_syscalls? Использование регулярного выражения для удаления пустых тегов абзаца <p> </ p> (стандартное str_replace в «пробеле» не работает) экземпляр codeigniter класса модели PDOException: SQLSTATE 01002 Не удалось подключиться к адаптивному серверу (степень 9) Как сохранить несколько значений флажков в сводной таблице? Как я могу захватить переменные сеанса php в javascript без обновления страницы? Алгоритмы для сходства строк (лучше, чем у Левенштейна и аналогичного текста)? Php, Js Как получить идентификатор видео из URL? (DailyMotion) Доступна библиотека создания и проверки форм и jQuery? Замена новой строки ее эквивалентом html в PHP Что случилось с репозиториями Symfony Bundle от Doctrine?

Синхронизация времени между сервером и браузером

Я работаю над живой подпиской для компании, которая отображает статус своего производственного графика в течение текущего 24-часового периода. Проблема в том, что некоторые из сотрудников должны иметь возможность просматривать этот живой канал из-за границы и в разные часовые пояса.

Есть два элемента, которые должны отображать текущее время «на месте» (сервер):

  • Часы, которые должны отображать текущее время на месте.

    Часы

  • Индикатор выполнения, который показывает прогресс через текущий 24-часовой период на месте.

    Индикатор

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

  • Летнее время в любом месте
  • Часовой пояс впереди или позади сервера

Если у кого-нибудь есть опыт / идеи, чтобы помочь, это было бы высоко оценено.

благодаря

Время сервера должно быть в UTC. Таким образом, легче перемещать временные интервалы.

Не полагайтесь на клиента на часовой пояс, так как он зависит от машины клиента, которая может быть настроена на любое время и часовой пояс. У вас есть учетная запись, для которой требуется часовой пояс. Используйте это для смещения часового пояса. По той же причине, почему онлайн-сервисы запрашивают ваш часовой пояс, а не обнаруживают его.

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

Интервальная синхронизация

Вы можете предоставить серверу исходное смещение времени и временной зоны. Рассчитайте начальное время клиента на основе этих исходных данных и попросите клиентскую сторону сделать отметку. Поскольку скрипт может выйти из синхронизации, вы периодически синхронизируются с сервером, как каждые 5 минут или около того.

Розетки

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

Непосредственно с сайта MDN :

var x = new Date(); var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60; 

Это приведет к смещению часового пояса в минутах между временем по Гринвичу и местным временем (приведенный выше пример делит на 60 для преобразования в часы). Это уже учитывает летнее время.

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

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

date_default_timezone_set ( "Европа / Брюссель");

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

Документация находится здесь: https://php.net/manual/en/timezones.php

Затем отобразите время, используя функцию даты php:

дата ( "с"); // Дата ISO 8601