Автоматическое увесличение чисел в счетчике
Приветствую!
Подскажите, как реализовать следующую задумку: Есть на странице число 1. Необходимо в течение суток несколько раз (не более 4 раз в сутки) прибавлять к нему число от 1 до 2. Остановиться счетчик должен когда достигнет отметки 30000. Сброс счетчика не предусмотрен. Спасибо! |
А страница, что, все это время открыта?
Нужна четкая постановка для реализации: сколько раз, в какое время прибавлять, какое число когда прибавлять. А так запоминайте в localStorage, когда, что прибавили и текущий результат. При открытии страницы сами решайте, по вашему алгоритму, когда что прибавлять. |
Нет, страница не открыта. Прибавление числа должно быть постоянным, начиная с того дня, как добавили скрипт, в течение всего времени, пока не настанет день и число достигнет 30000. Интервал времени, через которое прибавляется число - в течение суток, значит 1 раз в 6 часов можно сделать. Наличие пользователя на странице, при этом, значения не имеет.
|
Страница никак не может узнать, когда ее установили на сервер. Поэтому время установки страницы (начало отсчета) надо указать на самой странице.
Как то так (тут для примера время увеличения счетчика установлено 1 мин. Для 6 часов закомментарить эту строку и раскомментарить следующую) <body> <span id="counter"></span> <script> // Указываем время установки страницы const timeStart = new Date (2023, 09, 17, 16, 25); const maxcount = 30_000; //const timeTick = 24*60*60*1000; // 6 часов const timeTick = 60*1000; // 1 мин function nextCount () { let now = Date.now(); // Текущее время const count = Math.floor((now - timeStart)/timeTick); // Количество прошедших интервалов document.getElementById('counter').textContent = count; const nextTick = timeStart.valueOf() + (count + 1) * timeTick; // Время следующего увеличения const dt = nextTick - now; // Сколько осталось до следующего увеличения if (count < maxcount) { setTimeout(nextCount, dt); } } nextCount(); </script> </body> |
Цитата:
Цитата:
Цитата:
У тебя счетчик на 20 лет? |
Цитата:
|
Похоже у меня не совсем верно. Ведь страницу могут открыть и в Москве и в Пекине и Оттаве. Надо учитывать зоны. Поэтому надо задавать время начала отсчета UTC (По Гринвичу) и текущее время приводить к UTC
Так будет вернее <body> <span id="counter"></span> <script> // Указываем UTC время установки страницы (по Гринвичу) const timeStartUTC = new Date (2023, 09, 17, 16, 25); const maxcount = 30_000; //const timeTick = 24*60*60*1000; // 6 часов const timeTick = 60*1000; // 1 мин function nextCount () { let nowUTC = Date.now() + new Date().getTimezoneOffset() * 60 *1000; // Текущее время по Гринвичу const count = Math.floor((nowUTC - timeStartUTC)/timeTick); // Количество прошедших интервалов document.getElementById('counter').textContent = count; const nextTick = timeStartUTC.valueOf() + (count + 1) * timeTick; // Время следующего увеличения const dt = nextTick - nowUTC; // Сколько осталось до следующего увеличения if (count < maxcount) { setTimeout(nextCount, dt); } } nextCount(); </script> </body> |
Преогромнейшая благодарность!
P.S. А вот это точно правильно: const timeTick = 24*60*60*1000; // 6 часов ? Каждый день прибавляется +1 (т.е. не 1 раз в 6 часов, а 1 раз в 24 часа). |
Цитата:
Надо const timeTick = 6*60*60*1000; // 6 часов |
А если прибавлять не один, а рандомно 1 или 2. Что в count в данном случае прописывается :) ?
|
Часовой пояс GMT +3, время: 15:57. |