![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
17.10.2023, 13:17
|
Кандидат Javascript-наук
|
|
Регистрация: 27.05.2017
Сообщений: 112
|
|
Автоматическое увесличение чисел в счетчике
Приветствую!
Подскажите, как реализовать следующую задумку:
Есть на странице число 1. Необходимо в течение суток несколько раз (не более 4 раз в сутки) прибавлять к нему число от 1 до 2. Остановиться счетчик должен когда достигнет отметки 30000. Сброс счетчика не предусмотрен.
Спасибо!
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
17.10.2023, 13:23
|
![Аватар для voraa](https://javascript.ru/forum/image.php?u=69123&dateline=1640150450) |
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,756
|
|
А страница, что, все это время открыта?
Нужна четкая постановка для реализации: сколько раз, в какое время прибавлять, какое число когда прибавлять.
А так запоминайте в localStorage, когда, что прибавили и текущий результат. При открытии страницы сами решайте, по вашему алгоритму, когда что прибавлять.
Последний раз редактировалось voraa, 17.10.2023 в 13:27.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
17.10.2023, 14:38
|
Кандидат Javascript-наук
|
|
Регистрация: 27.05.2017
Сообщений: 112
|
|
Нет, страница не открыта. Прибавление числа должно быть постоянным, начиная с того дня, как добавили скрипт, в течение всего времени, пока не настанет день и число достигнет 30000. Интервал времени, через которое прибавляется число - в течение суток, значит 1 раз в 6 часов можно сделать. Наличие пользователя на странице, при этом, значения не имеет.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
17.10.2023, 16:38
|
![Аватар для voraa](https://javascript.ru/forum/image.php?u=69123&dateline=1640150450) |
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,756
|
|
Страница никак не может узнать, когда ее установили на сервер. Поэтому время установки страницы (начало отсчета) надо указать на самой странице.
Как то так
(тут для примера время увеличения счетчика установлено 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>
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
17.10.2023, 17:04
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 456
|
|
Сообщение от samdo
|
число достигнет 30000
|
Сообщение от samdo
|
прибавляется число
|
Сообщение от samdo
|
1 раз в 6 часов
|
=30000/(24/6)/365=20
У тебя счетчик на 20 лет?
Последний раз редактировалось Rise, 17.10.2023 в 17:08.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
17.10.2023, 18:24
|
Кандидат Javascript-наук
|
|
Регистрация: 27.05.2017
Сообщений: 112
|
|
Сообщение от Rise
|
=30000/(24/6)/365=20
У тебя счетчик на 20 лет?
|
Примерно да)
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
17.10.2023, 21:28
|
![Аватар для voraa](https://javascript.ru/forum/image.php?u=69123&dateline=1640150450) |
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,756
|
|
Похоже у меня не совсем верно. Ведь страницу могут открыть и в Москве и в Пекине и Оттаве. Надо учитывать зоны. Поэтому надо задавать время начала отсчета 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>
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
19.10.2023, 19:58
|
Кандидат Javascript-наук
|
|
Регистрация: 27.05.2017
Сообщений: 112
|
|
Преогромнейшая благодарность!
P.S. А вот это точно правильно: const timeTick = 24*60*60*1000; // 6 часов ? Каждый день прибавляется +1 (т.е. не 1 раз в 6 часов, а 1 раз в 24 часа).
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
19.10.2023, 22:03
|
![Аватар для voraa](https://javascript.ru/forum/image.php?u=69123&dateline=1640150450) |
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,756
|
|
Сообщение от samdo
|
вот это точно правильно: const timeTick = 24*60*60*1000; // 6 часов ?
|
Нда. Это не правильно
Надо
const timeTick = 6*60*60*1000; // 6 часов
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
20.10.2023, 09:53
|
Кандидат Javascript-наук
|
|
Регистрация: 27.05.2017
Сообщений: 112
|
|
А если прибавлять не один, а рандомно 1 или 2. Что в count в данном случае прописывается ![](https://javascript.ru/forum/images/smilies/smile.gif) ?
|
|
|
|