Показать сообщение отдельно
  #7 (permalink)  
Старый 17.10.2023, 21:28
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 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>
Ответить с цитированием