получить время с сервера
Как сделать чтобы отображалось в браузере время, но только время бралось не с моего компа а из сервера на котором находится страничка.
<INPUT type="text" ID='cl3' size=28 value="" style="color: #FFFF00; font-family: Courier New; font-size: 12pt; border: 1px solid #D90000; background-color: #732501" name="vd"> <SCRIPT> function clock3(){ var d=new Date() return d.toLocaleDateString()+" "+d.toLocaleTimeString() } setInterval("document.all.cl3.value=clock3()",500) // обновление показаний часов </SCRIPT> |
Цитата:
<html> <head> </head> <body> <p>Серверное время - #($zt($p($h,",",2)))#</p> </body> </html> |
незнаю что такое csp , пример вставил в браузер нечего не показывает
|
Цитата:
Прямо точной синхронизации тебе добиться вряд ли удастся, но есть вариант, скажем, синхронизировать время AJAX-ом. Т.е., ты делаешь запрос, который возвращает тебе текущее время сервера (желательно, в юникс-формате). Потом ты прибавляешь к этому ответу время, которое ушло на его получение, и получаешь почти точное значение времени сервера. |
незнаю как это сделать помогите плз, тут ведь знающему делов на одну минуту если не меньше
|
получилось но время стоит на месте, а как сделать чтобы время шло как в первом премере
я в этот примеор вставил php код. <INPUT type="text" ID='cl3' size=28 value="" style="color: #FFFF00; font-family: Courier New; font-size: 12pt; border: 1px solid #D90000; background-color: #732501" name="vd"> <script type="text/javascript"> function clock3(){ var d=new Date(<?php print time(); ?> * 1000) return d.toLocaleDateString()+" "+d.toLocaleTimeString() } setInterval("document.all.cl3.value=clock3()",500) // обновление показаний часов </SCRIPT> |
Цитата:
|
Цитата:
Цитата:
|
сам алгоритм я понимаю как должен быть построен а вот само решение немогу сделать. напишите хоть ктото. я джаву оочень плохо знаю
|
так и не дождался ответа, на другом форуме помогли, вот как это должно было выглядеть. МОЖНТ КОМУ ТО ПРИГОДИТСЯ Я ЖЕ НЕ ЖЛОБ.
ГОТОВОЕ РЕШЕНИЕ <? echo date( 'Y-г m-м d-ч ', time() ); ?> <b id="seconds">0</b> <script Language="JavaScript"> var hours = <?php echo date("H"); ?>; var min = <?php echo date("i"); ?>; var sec = <?php echo date("s"); ?>; function display() { sec+=1; if (sec>=60) { min+=1; sec=0; } if (min>=60) { hours+=1; min=0; } if (hours>=24) hours=0; if (sec<10) sec2display = "0"+sec; else sec2display = sec; if (min<10) min2display = "0"+min; else min2display = min; if (hours<10) hour2display = "0"+hours; else hour2display = hours; document.getElementById("seconds").innerHTML = hour2display+":"+min2display+":"+sec2display; setTimeout("display();", 1000); } display(); </script> |
Уродливое, кривое решение через жопу. А главное - нерабочее.
Уже через 5-10 минут использования сайта появятся серьёзные расхождения в дате, т.к. setTimeout не гарантирует, что следующий запуск будет точно через секунду, он гарантирует только то что запуск будет не раньше чем через секунду. Малейшее подтормаживание и таймер сбит. Делать надо как-то так было: <b id="seconds">00:00:00</b> <script type="text/javascript"> (function(){ var difference = <?php echo time() ?>*1000 - new Date(), //сразу вычисляем разницу между серверным временем и временем на клиенте block = document.getElementById("seconds"); (function redraw(){ var date = new Date(); //получаем текущую дату клиента date.setTime( date.getTime() + difference); //прибавляем разницу block.innerHTML = date.toTimeString().substring(0,8); //форматируем и выводим setTimeout(redraw, 1000); //запускаем таймер на повтор функции }()) }()) </script> |
Щито? Насколько я понимаю php echo сразу выдаётся в поток, script тоже обрабатывается в потоке, т.е. переменная differece появляется практически сразу и лаг не должен составить и пары миллисекунд. А вот с ajax всё вилами по воде писано.
|
Вы ещё tcp пакеты посчитайте.)
Я в php не знаток, но вроде как если специально не включена функция буффера все echo отправляются клиенту сразу без накопления. В любом случае ajax гараздо менее надёжен в плане лага. |
Ajax это в любом случае дополнительный запрос, что даёт огромный простор для лагов. Далее событийная модель опятьже добавляет задержку...
|
Aetae, ваш пример тоже не совсем делает то, что требуется. Если у клиента будет время отличное от сервера, то ваш скрипт будет отображать время клиента, а не время сервера, а значит он не выполняет того, о чем спрашивал автор.
|
Думаю через xhr-запрос можно точнее синхронизировать время. Так мы можем узнать общее время пинга, и поделив его пополам - примерную задержку на доставку ответа от сервера.
|
Цитата:
|
var baseTime = <?php echo time() * 1000 ?>; var startTime = new Date().getTime(); var UTC = 4; function redraw(){ var date = new Date() - startTime; var time = baseTime + date; var d = new Date(time); d.setUTCHours(d.getUTCHours() + UTC); $('.clock').html(d.toUTCString().substring(16, 25)); setTimeout("redraw()", 1000); //запускаем таймер на повтор функции } $(document).ready(function() { redraw(); }); Вот я написал, не зависит от часовых поясов. Но зависит от времени на компе клиента, если время изменить на неправильное, то время будет неверное :( |
получение времени с сервера.
а на сервере установлен сервер времени? нет ? - "ручная" синхронизация с любым временем может отпасть после любой проблемы синхронизация на клиенте с мировым виндовс служба времени включена ?(по умолчанию нет) -нет? не то что локальное, "мировое" из биоса поднимается - вероятность правильного низкая . пинг делить на 2? -без службы времени в винде погрешность около 15 мс на вычисления |
Саша82, спасибо!
Тут вопрос для какой цели? Мне вот особая точность не нужна, достаточно минуты после загрузки страницы. Сервер халявный, связи с админом практически нет, приходится вставлять костыли, так как время сервера неверное, да ещё гуляет. Повесил часики на гостевой, мне ребята позвонят если сильно отстают, а я забываю иногда сверять. А на стоячее время никто внимания не обратит. |
Что-то ругается на скобки:
alert(<?php echo time() * 1000 ?> +'\n' + new Date()) |
Спасибо за решение
а помошникам стыд и срам.... от их заумства они не выглядят умными
|
Это на сервере
<?php echo date('H:i:s d.m.Y'); ?> Код js, посылающий каждую секунду ajax запрос let test = document.querySelector('#test'); document.addEventListener('DOMContentLoaded', () => { window.setInterval(timer, 1000); }); async function timer() { let promise = await fetch('/ajax.php/'); let data = await promise.text(); test.innerHTML = data; } |
Цитата:
|
laimas, а вдруг у клиента на компьютере часы идут неправильно? :lol:
P.S. На самом деле на компьютере часы таки могут идти неправильно, сам лично столкнулся с этим когда в ноутбуке сдохал батарейка CMOS - часы отставали за час на ~5-10 минут. Но это слишком уникальная ситуация чтоб о ней заботиться.) |
Цитата:
|
laimas, а если нужно точное время? Читай далее...
АндрейD, достаточно получить время один раз, все остальные времена вычисляются на его основе. Вы можете получить с сервера времени(или со своего сервера) метку времени (UTC timestamp) и её передать в конструктор Date. Так вы получите точное время на тот момент. Пусть оно хранится в константе serverTime. Вам сразу же надо создать константу со временем на устройстве пользователя, например, пусть это будет clientTime. Вычислив разницу между двумя этими временами, вы узнаете на сколько отличается время клиента от точного! const dateDiff = serverDate.getTime() - clientDate.getTime(); Для того, чтобы получать впоследствии точное время, вам нужно прибавлять эту разницу ко времени клиента const date = new Date(Date.now() + dateDiff); |
Цитата:
|
Цитата:
|
Цитата:
Если у клиента разница в 5 секунд, то это нерадивый клиент, если у сервера ошибка в 5 секунд, то это нерадивый сервер, если у обоих ошибка, то нерадивы оба. Но причем тут время, часовые пояса и т.д.? Использование UTC будет иметь только одно отличие от расчета на разность часовых поясов - в UTC нет перевода на зимнее/летнее время, а вот часовой пояс будет смещаться. Но если сервер отдает свой часовой пояс, то это будет скорректировано и у него. Все остальное, это болтовня. |
Цитата:
Цитата:
или Date.now() — ведь это брешь, не было бы более безопасней использовать performance.now()? Браво! Ты полностью и безоговорочно доверяешь своим клиентам! |
Несешь какую-то пургу, слово UTC метка на компьютере получается не от системных часов, а специальным запросом непосредственно от эталонных атомных часов. Что за бред.
Точность хода системного времени в первую очередь зависит от качества кварцевого резонатора. Если на моей материнской плате применены компоненты применяемые в военной технике, то она и качественная, и надежная. За много лет эксплуатации я даже батарейку CMOS еще не разу не менял. Ту точность времени, которую обеспечивают ее компоненты, она и поддерживает. Кроме этого системное время синхронизируется с сигналами точного времени. Разница в 5 секунд может быть только у того, кто часов не наблюдает, то есть у счастливых. Более месяца назад я купил смарт часы. Посмотрел, проверил, настроил и положил. Сегодня решил, что пора завтра сходить и поставить в конце концов симку на них, чтобы использовать по назначению. Аккумулятор разряжен сильно, это раз, компоненты этих часов, это конечно куда ниже по уровню точности чем на МП, это два, все это вкупе обеспечивало отставание на 3 минуты за это время. Достаточно было синхронизировать время по сети и все. Ты хоть рулеткой может измерять свое время, доверять кому и чему хочешь, мне пофигу, только не вешай мне лапшу на уши. |
Цитата:
Цитата:
Цитата:
Некие две девушки вообще вручную синхронизировали часы на телефоне, чтобы придти потом по времени, которое принято в заведении! И некоторые вообще не доверяют таким вещам, как автоматическое обновление времени и настраивают по наручным механическим часам! Некоторые вообще просто так крутят время вперед-назад, потому что в некоторых играх начинают происходить интересные вещи! Цитата:
Цитата:
Цитата:
|
Любишь ты попусту языком чесать, поэтому иногда и опускаешься до бредятины. Я же не любитель пустых разговоров.
|
Цитата:
https://stackoverflow.com/questions/...cause-problems А то, что нельзя получив однажды точное время от сервера в дальнейшем получать точное время высчитывая его при помощи Date.now() видно из этого примера... setInterval(() => console.log(Date.now(), performance.now()), 500)Стоит лишь поменять системное время, и всё поломается! Однако у performance.now() такой проблемы нет! Цитата:
|
Часовой пояс GMT +3, время: 11:24. |