Мне нужно показать таймер, центральный для PHP SERVER DATE, здесь это date1. (Речь идет о встрече, которая была назначена по бельгийскому времени, и другие участники из другой страны присоединяются к встрече, чтобы увидеть продолжительность встречи в реальном времени.)
Значение переменной date1 с сервера PHP, расположенного в Бельгии.
Но пользователи находятся в США, на востоке Мидделя, в Азии, в Австралии, и там дата браузера не совпадает с датой PHP-сервера.
Как я могу получить значение date2 без сканирования на сервер в качестве даты / времени Бельгии? так что я могу показать Gape в реальном времени на date2.
var date1 = new Date("10-01-2016 09:00:00"); // Meeting at PHP SERVER date
var date2 = new Date("10-01-2016 09:30:32"); // User joined remotely but Browser date is wrong here
var diff = date2.getTime() - date1.getTime();
var msec = diff;
var hh = Math.floor(msec / 1000 / 60 / 60);
msec -= hh * 1000 * 60 * 60;
var mm = Math.floor(msec / 1000 / 60);
msec -= mm * 1000 * 60;
var ss = Math.floor(msec / 1000);
msec -= ss * 1000;
alert(hh + ":" + mm + ":" + ss);
Я думаю, что вы могли бы использовать этот ответ: Получение часового пояса клиента в JavaScript чтобы получить смещение часового пояса клиента (браузера), php-сервер может отправить эту информацию вместе с date1, и отсюда легко конвертировать, как вы уже сделали.
Другой подход может состоять в том, что сервер также отправляет текущее время (аналогично тому, каким может быть заголовок Date http), и клиент может сохранять в переменной время на клиенте в момент получения http, а затем вычислять разницу между серверные часы и клиентские часы. Таким образом, можно не только рассчитать, что 9:00 в Бельгии, это 2:00 в Нью-Йорке, но также отобразить счетчик на клиенте, который будет синхронизирован с временем сервера (то есть, даже если часы клиента выключены на 2 минуты, счетчик может быть с точностью до часов сервера, и поэтому все люди будут видеть один и тот же счетчик, независимо от погрешности часов их клиента (что является хорошей функцией, даже если мы не думаем о разных часовых поясах))
Так что в вашем php помимо date1 = «10-01-2016 09:00:00» вы также отправите
server_date="<?php date('...') ?>"
использование http://php.net/manual/en/function.date.php для строки формата 🙂
Затем в javascript в самом начале обратного вызова onLoad вы должны сделать:
client_date = new Date();
Теперь вы можете сделать свою арифметику (в псевдокоде):
elapsed_since_start = date1 + (server_date - client_date)
Конечно, если вам нужно учесть разные часовые пояса, вам нужно будет учесть и это:
elapsed_since_start = (date1-server_tz_offset) + ((server_date-server_tz_offset) - (client_date-client_tz_offset))
Других решений пока нет …