Добрый вечер! Нужен таймер обратного отсчета, который выводил бы в реал тайме сколько секунд осталось до завершения минуты, отталкиваясь от времени сервера. И выводил бы это время пользователям. Есть таблица в бд в которой прописано время начала и завершения минуты. Пробовал ajax ом дергать время сервера, но часто подвисания. Помогите пожалуйста с этим таймером, ни как не могу справиться.
Давно писал я одному новичку таймер, вот, лови. Работает просто - в поле ввода пишется время в будущем/прошлом, от которого надо посчитать разницу к текущему реальному времени. Принимает входящие данные в куче форматов. Попробуй, например, напиши там 28 nov 2017 Жмакнешь старт - он начнет считать вплоть до миллисекунд, сколько осталось до указанного времени. Ориентируется он на реальное время, а не на таймауты и инетвалы, по этому точен как сатана. В общем, как кусок мрамора - просто отсеки все лишнее.
Ух, слишком лихо, мне просто нужно чтобы он брал время сервера, а точнее только секунды сервера PHP: <?php echo '<div class="clock">'.date("s")."</div>"; ?> и считал сколько осталось до нуля уже у пользователя, как до нуля доходит снова начинает отсчет, потом снова начинал отсчет и так до бесконечности, просто отсчитывает отталкиваясь от времени сервера до нуля и заново. А сейчас пользователи php скрипт дергают ajaxом каждую секунду и если инет проседает, то на сайте подвисоны всплывают(( хочу от этого избавится, а то не прилично так(
Нужно? Делайте. Заблокируйте поле ввода, либо вообще замените на DIV, а в качестве стартового значения отдавайте ему время сервера. И он будет: без проседаний и фризов, с точностью атомных часов. "Цикличность отсчетов и так до бесконечности" прикрутить тоже не проблема. Вам все карты в руки. Анализируйте логику решения, делайте на ее базе свое. Там не так много работы, как кажется, чтобы адаптировать под ваши нужды.
Не получилось --- Добавлено --- Есть готовые решения? Или кто может помочь реализовать? Нужен таймер обратного отсчета, который выводил бы в реал тайме сколько секунд осталось до завершения минуты, отталкиваясь от времени сервера. И выводил бы это время пользователям. И нужен еще один таймер который отсчитывает сколько до конца часа, минуты-секунды
Прошу все таки помочь реализовать данные таймеры. Готов заплатить небольшую деньгу! Заранее благодарен!
@antonio21 сколько? PHP: <?php header('Content-Type: text/html; charset=utf-8'); if($_SERVER['REQUEST_METHOD'] == 'POST') { echo rand(1, 59); exit; } ?> <!DOCTYPE html> <html> <head> <title></title> </head> <body> <div>countdown <span id="timer">0</span> s.</div> <script type="text/javascript" src="https://code.jquery.com/jquery-3.1.1.min.js"></script> <script type="text/javascript"> function func() { $(function() { var seconds = $('#timer').text(); if (seconds > 0) { $('#timer').text(--seconds); setTimeout(func, 1000); } else { var jqxhr = $.ajax({ url: '<?=$_SERVER['PHP_SELF']?>', data: {'getseconds':'true'}, type: 'POST', }) .done(function(seconds) { $('#timer').text(seconds); setTimeout(func, 1000); }) .fail(function() { var conn = confirm("Нет связи с сервером. Повтрить попытку?"); if (conn) { setTimeout(func, 1000); } }); } }); } setTimeout(func, 1000); </script> </body> </html>
Что это? )) --- Добавлено --- Отображает сначала : countdown 0 s. а через секунду countdown s. не совсем то что нужно )) Что не так делаю? По деньге, 500 рублей есть! Готов их заплатить за помощь, заранее благодарен!
где живой пример? у меня всё работает --- Добавлено --- хм, 75 мороженок можно купить, круто --- Добавлено --- Вот на runnable выложил http://code.runnable.com/V-5jlWssns5kuiz7/
На одном сайте отображается на другом нет, буду разбираться. Косяк в том что если страницу обновляю один или несколько раз, то таймер сбивается, считает 30, 29, 28 обновляю, 4,3,2,1,0 потом 10,9,8,7 потом снова с 20,19,18. Мне важно чтобы он нормально считал, так как когда 00 на сервере на странице действие происходит, а счетчик считает что-то свое не сходится с временем сервера
Да, жесткий рассинхрон, я вывожу $tm = date("s"); echo '<div class="timemin"> <div id="tim">'.$tm.'</div></div>'; и ахахом его дергаю и Ваш скрипт на той же странице, разница секунд 20, ну и цифры постоянно скачут. досчитает до нуля и начинает с 10, потом снова(( --- Добавлено --- Доходит до нуля и начинает считать с 39,38,37, как пойдет в общем считает ))
ну так мой пример у меня хорошо работает и на runnable, ваш я не вижу, так как там всё можно было испортить, задача решена?
сделал файлик t.php PHP: <?php if($_SERVER['REQUEST_METHOD'] == 'POST') { echo rand(1, 59); exit; } ?> Код (Javascript): function time() { $(function() { var seconds = $('#timer').text(); if (seconds > 0) { $('#timer').text(--seconds); setTimeout(time, 1000); } else { var jqxhr = $.ajax({ url: 't', data: {'getseconds':'true'}, type: 'POST', }) .done(function(seconds) { $('#timer').text(seconds); setTimeout(time, 1000); }) .fail(function() { var conn = confirm("Нет связи с сервером. Повтрить попытку?"); if (conn) { setTimeout(time, 1000); } }); } }); } setTimeout(time, 1000); ну и вывожу на страницу <div>countdown <span id="timer">0</span> s.</div> И получаю дикий рассинхрон, если сравнивать с временем date("s"); когда к примеру date("s"); отсчитывает 31,32,33,34 то скрипт считает вообще мимо, 9,8,7, а должен 29,28,27, и т.д. --- Добавлено --- Я такой же рассинхрон получаю когда так делал: PHP: <?php session_start(); if(!$_SESSION['timer']){ $_SESSION['timer'] = date("s"); }else if($_SESSION['timer']==0){ unset($_SESSION['timer']); }else { echo $_SESSION['timer']--; } ?> А мне нужно чтобы он с date("s"); секунда в секунду шел, ну только в обратном порядке, мне же таймер нужен )
надо 59 - date("s") делать? Чтобы обратно отсчитал сколько до конца? --- Добавлено --- @antonio21 видео на ютуб можно выложить --- Добавлено --- Вот примерно у меня так
Да, чтобы он брал date("s") и отсчитывал сколько осталось до 00 И постоянно синхронизировался с сервером, ну или просто грамотный скрипт который будет точно расчитывать ост время на стороне браузера клиента, важно чтобы он точный был и при большом кол-ве пользователей сервер не мочил. Тоже самое с часом, берем date("h:i:s"); и считаем до 00:00:00 --- Добавлено --- Выведите date("s") и посмотрите будет ли рассинхрон? Я на разных страничках-сайта пробовал, везде одно и тоже, рассинхрон.
А в чем тогда проблема может быть? Я даже если ваш код беру то у меня рассинхрон и скачут цифры, дойдет до нуля потом с 10ти начнет, потом с 15, потом с 40ка
@antonio21 ну а где я могу посмотреть хотя бы живой пример на вашем сервере? Синхронизирует когда доходит до нуля --- Добавлено --- тут надо websockets поднимать или использовать службы на его основе с API
А можно чаще его синхронизировать, раз в секунду или раз в 5 секунд ? --- Добавлено --- Можете здесь посмотреть как работает криво: http://live-teatr.ru/timer.php --- Добавлено --- И когда страницу обновляешь цифры как пойдет выскакивают, то 10, то бах 50, потом 20, хотя между обновлением страницы секунда проходит
Вот так страничка выглядит Код (Text): <?php header('Content-Type: text/html; charset=utf-8'); if($_SERVER['REQUEST_METHOD'] == 'POST') { echo rand(1, 59); exit; } ?> <!DOCTYPE html> <html> <head> <title></title> </head> <body> //Текущие секунды: <div id="t"></div> <script type="text/javascript"> function time() { $.ajax({ url: "<?php date("s");?>", cache: false, success: function(html){ $("#t").html(html); } }); } $(document).ready(function(){ time(); setInterval('time()',1000); }); </script> // Ваш скрипт <div>countdown <span id="timer">0</span> s.</div> <script type="text/javascript" src="https://code.jquery.com/jquery-3.1.1.min.js"></script> <script type="text/javascript" src="tim.js"></script> <script type="text/javascript"> function func() { $(function() { var seconds = $('#timer').text(); if (seconds > 0) { $('#timer').text(--seconds); setTimeout(func, 1000); } else { var jqxhr = $.ajax({ url: '<?=$_SERVER['PHP_SELF']?>', data: {'getseconds':'true'}, type: 'POST', }) .done(function(seconds) { $('#timer').text(seconds); setTimeout(func, 1000); }) .fail(function() { var conn = confirm("Нет связи с сервером. Повтрить попытку?"); if (conn) { setTimeout(func, 1000); } }); } }); } setTimeout(func, 1000); </script> </body> </html> --- Добавлено --- Вот и у меня вопрос почему такие цифры разные, не пойму в чем дело((
Потому что там случайное число, ты же сам предложил его на date('s') заменить, по условию задачи лучше на 59 - date('s'); чтобы показывать сколько осталось до конца минуты, вот закинь и дай ссылку на это страницу PHP: <?php header('Content-Type: text/html; charset=utf-8'); if($_SERVER['REQUEST_METHOD'] == 'POST') { echo 59 - date("s"); exit; } ?> <!DOCTYPE html> <html> <head> <title></title> </head> <body> <div>countdown <span id="timer">0</span> s.</div> <br> <div>countdown <span id="timerlive">0</span> s. live</div> <script type="text/javascript" src="https://code.jquery.com/jquery-3.1.1.min.js"></script> <script type="text/javascript"> $(function() { function func() { var seconds = $('#timer').text(); if (seconds > 0) { $('#timer').text(--seconds); setTimeout(func, 1000); } else { var jqxhr = $.ajax({ url: '<?=$_SERVER['PHP_SELF']?>', data: {'getseconds':'true'}, type: 'POST', }) .done(function(seconds) { $('#timer').text(seconds); setTimeout(func, 1000); }) .fail(function() { var conn = confirm("Нет связи с сервером. Повтрить попытку?"); if (conn) { setTimeout(func, 1000); } }); } } function funclive() { var jqxhr = $.ajax({ url: '<?=$_SERVER['PHP_SELF']?>', data: {'getseconds2':'true'}, type: 'POST', }) .done(function(seconds) { $('#timerlive').text(seconds); setTimeout(funclive, 1000); }); } setTimeout(func, 1000); setTimeout(funclive, 1000); }); </script> </body> </html> --- Добавлено --- где live это значение раз в секунду обновляется с сервера, а без live синхронизируется после ноль секунд