Серверное время на JavaScript

Обычно на страницах сайтов при манипуляциях со временем программисты используют объект Date. Например вывести время, которое изменяется каждую секунду или в зависимости от текущего времени выводить какие-то события, обратные отсчеты и т.п.
Но ведь объект Date берет значение из системного времени в ОС пользователя. То есть полностью на стороне клиента. А если пользователь находится в другом часовом поясе, приложение, которое заточено под показ событий на серверное время будет работать не правильно.
Одним из вариантов работы на стороне клиента именно с серверным временем будет следующий пример:
В html-коде пишем следующий код между тегами head, обязательно перед подключением сторонних javascript файлов, т.к. страница грузит сторонние скрипты синхронно, ибо они могут влиять на дальнейшее отображение.
1 2 3 4 | <script language='javascript'> realtime = <?php echo time(); ?> setInterval("realtime++", 1000); </script> |
Здесь мы передаем с сервера время в формате Unix-time и присваиваем в глобальную переменную.
Затем ставим таймер на увеличение значение времени каждую секунду.
Грубо говоря, мы запустили свои часы на странице.
Теперь вместо:
1 | Math.round(new Date().getTime() / 1000) |
смело используем нашу переменную «realtime», которая будет содержать юникстайм с погрешностью в несколько секунд.
Этот вариант конечно не идеален, будет погрешность на время передачи данных и загрузки их в браузер, но для приложений, где 1-5 секунд не играют роли, можно пользоваться.
setInterval даст слишком большое расхождение с реальным временем, setInterval не обеспечивает точного цикла, цикл будет ~1 секунду, но не точно.