Как в 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)

→ Ссылка