Как в JS-таймере задать время по Московскому часовому поясу?
Использую таймер, в котором задано локальное время пользователя:
const deadline = new Date(2024, 2, 20); /* 1 января 2024 (месяцы считаются от 0) */
let timerId = null;
function countdownTimer() {
const diff = deadline - new Date();
if (diff <= 0) {
clearInterval(timerId);
}
const days = diff > 0 ? Math.floor(diff / 1000 / 60 / 60 / 24) : 0;
const hours = diff > 0 ? Math.floor(diff / 1000 / 60 / 60) % 24 : 0;
const minutes = diff > 0 ? Math.floor(diff / 1000 / 60) % 60 : 0;
const seconds = diff > 0 ? Math.floor(diff / 1000) % 60 : 0;
$days.textContent = days < 10 ? '0' + days : days;
$hours.textContent = hours < 10 ? '0' + hours : hours;
$minutes.textContent = minutes < 10 ? '0' + minutes : minutes;
}
const $days = document.querySelector('.js-days');
const $hours = document.querySelector('.js-hours');
const $minutes = document.querySelector('.js-minutes');
countdownTimer();
timerId = setInterval(countdownTimer, 1000);
Как можно задать время по Московскому часовому поясу, чтобы, например, таймер отсчитывал время до 18:00 26 мая по МСК?
Ответы (1 шт):
Автор решения: SwaD
→ Ссылка
18:00 по МСК это будет запись:
const deadline = new Date(2024, 4, 26, 18, 180);
или в лоб
const deadline = new Date(2024, 4, 26, 21);
В целом, для того, что бы узнать, смещение часового времени пользователя относительно гринвича, есть метод getTimezoneOffset
Он возвращает смещение в минутах. Что бы знать, сколько добавить времени к гринвичу, что бы получить локальное время(МСК это +3 часа - 180 мин) используется так:
const timeZone = new Date().getTimezoneOffset() * -1;
const timeGrinvitch = new Date(2024, 4, 26, 18, 0);
const deadline = new Date(2024, 4, 26, 18, timeZone);
console.log(timeGrinvitch, deadline)