Похоже у меня не совсем верно. Ведь страницу могут открыть и в Москве и в Пекине и Оттаве. Надо учитывать зоны. Поэтому надо задавать время начала отсчета 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>