В интернете встречаются всего два типа таймеров:
1-обратного отсчёта на определённую дату и время
2-таймер от локального времени
Мне нужен таймер обратного отсчёта, но не на какую то определённую дату, а на 3 часа, при том он должен быть зациклен, и самое важное, он должен быть, не знаю как назвать... глобальным? В общем, чтобы он всегда показывал одинаковое время у всех пользователей, если осталось 2 часа 34 минуты, то и у Васи и у Пети отображалось это время.
JavaScript
Как сделать таймер на js
Чтоб он был глобальным надо чтоб он брал время с сервера в большинстве случаев на сервере можно запускать скрипты на PHP надо создать файл содержащий скрипт
<?php echo echo @date('U'); ?>
А у клиента должен происходить запрос по аджакс с сервера тогда у всех будет время синхротронно
⚤
<?php echo echo @date('U'); ?>
А у клиента должен происходить запрос по аджакс с сервера тогда у всех будет время синхротронно
⚤
setTimeout в помощь.
или setInterval, если не один раз.
Если одинаковое время, тогда передавай с сервера.
или setInterval, если не один раз.
Если одинаковое время, тогда передавай с сервера.
Каким же образом JS (выполняющийся локально в браузере Васи) узнает время на компах Пети, Коли, и других персонажей? Прааально, никак.
Время необходимо получать из интернета - хоть со своего сервера, хоть с чужого (XMLHttpRequest/$.ajax). Далее, от этого времени посчитать остаток мс до следующего срабатывания, и ставить на этот остаток таймер через setTimeout - где сделать две вещи: 1. однократно выполнить код итерации; 2. поставить этот код на дальнейшее повторение с интервалом (через setInterval).
Кодом короче, чем словами:
setTimeout(() => {
doSomething();
setInterval(doSomething, 1.08e7);
}, timeLeft);
Аяксовую часть не пишу, т. к. ее можно по-разному реализовать.
́
Если же необходимо реализовать вывод обратного отсчета, то лучше сделать по-другому: хранить датувремя (timestamp) следующего срабатывания, и в интервале считать разность с текущим временем (выводим ее всегда, а затем проверяем: если разность <= 0, то выполняем код итерации 3часового цикла и заносим новый timestamp в "контрольную" переменную, просто прибавляя 3ч к текущему времени).
Время необходимо получать из интернета - хоть со своего сервера, хоть с чужого (XMLHttpRequest/$.ajax). Далее, от этого времени посчитать остаток мс до следующего срабатывания, и ставить на этот остаток таймер через setTimeout - где сделать две вещи: 1. однократно выполнить код итерации; 2. поставить этот код на дальнейшее повторение с интервалом (через setInterval).
Кодом короче, чем словами:
setTimeout(() => {
doSomething();
setInterval(doSomething, 1.08e7);
}, timeLeft);
Аяксовую часть не пишу, т. к. ее можно по-разному реализовать.
́
Если же необходимо реализовать вывод обратного отсчета, то лучше сделать по-другому: хранить датувремя (timestamp) следующего срабатывания, и в интервале считать разность с текущим временем (выводим ее всегда, а затем проверяем: если разность <= 0, то выполняем код итерации 3часового цикла и заносим новый timestamp в "контрольную" переменную, просто прибавляя 3ч к текущему времени).
Похожие вопросы
- Помогите сделать задание по js
- Зачем разработчики js сделали так что там где могли быть функции они добавили методы встроенных объектов.
- Помогите определиться с выбором нового языка (JS(TS) vs Java)
- Js фреймворки, что полезного можно для себя найти?
- В чем цель фреймворков js web?
- [HTML/CSS/JS] Как сохранять изменённые в .js данные оффлайн-сервера локально?
- Почему jQuery методы популярнее js методов при общении с ДоМ?
- ПОЧЕМУ JS ТАКОЙ НЕПОНЯТНЫЙ???
- вопрос по JS. " простой ()";
- Порядок изучени JavaScripta. Путь к Node.js. Нужен совет по обучению от программистов
function st(){
let req = new XMLHttpRequest();
req.open("GET","/p/date/d.php",true);
req.onreadystatechange = function(){
d = req.responseText;setInterval(()=>{let dd=d%(3*60*60);console.warn((dd/(3600*3)^0)+":"+((dd/(3600*3))*60^0)+":"+(((dd/(3600*3))*60)%1*60^0));d--},1000)
}
req.send();
}
Таймер обратного отсчета выводится в консоль
⚤
function st(){
let req = new XMLHttpRequest();
req.open("GET","/d.php",true);
req.onreadystatechange = function(){if (this.readyState != 4) return;if(this.status==200){console.warn('Старт!');
d = +req.responseText;setInterval(()=>{let dd=(3600*3)-(d%(3*60*60));console.warn((dd/3600^0)+":"+((dd%3600)/60^0)+":"+((dd%3600)%60));d++},1000)
}}
req.send();
}
Только на сервере надо создать в корне файл d.php
и положить в него <?php echo @date('U'); ?> тогда всё работает результат в консоли виден
⚤