Задать вопрос

Как настроить таймер на javascript — время до открытия магазина?

Подскажите пожалуйста, как можно сделать таймер на javascript.

Часы работа магазина: 09:00 - 21:00.
Нужно чтобы был html объект, например , в котором бы был таймер, и надписи-события:
1. Магазин открыт (подпадает под время с 09:00 - 21:00) - идет таймер и надпись, до закрытия осталось ...
2. Магазин закрыт - идет таймер, до открытия осталось ...

При этом нужно чтобы время бралось с часового пояса +5 екатеринбург.
  • Вопрос задан
  • 730 просмотров
Подписаться 7 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
Можно всё считать в локальной временной зоне. Известно смещение от UTC времени магазина. Текущее смещение посетителя от UTC получаем через getTimezoneOffset().

Задача получить два объекта времени: открытия и закрытия магазина, во временной зоне браузера посетителя.

Если какой-то из двух оказался в прошлом, добавляем ему один день, чтобы оба оказались в будущем. Который из двух оказался меньше – подскажет, открыт сейчас магазин или закрыт.

Решение
function tillItOpens() {
  const D = new Date();
  const shopOffsetMin = 5 * 60; // GMT+5
  const myOffsetMin = D.getTimezoneOffset();
  const diffMin = shopOffsetMin + myOffsetMin;
  

  function futureDate(hours, fixMin) {
    const d = new Date();
    d.setHours(hours);
    d.setMinutes(0 + fixMin);
    d.setSeconds(0, 0);
    if (d < new Date()) d.setDate(d.getDate() + 1);
    return d;
  }

  
  const dOpens = futureDate(9, diffMin);
  const dCloses = futureDate(21, diffMin);

  if (dOpens < dCloses) {
    // скоро откроется
    const hours = Math.floor((dOpens - D) / 36e5);
    const minutes = Math.floor((dOpens - D) / 6e4) - 60 * hours;
    
    return `до открытия ${hours}:${minutes}`
    
  } else {
    // сейчас открыто
    return "Сейчас открыто!";
    // хорошо ещё посмотреть, сколько остаётся до закрытия - успеет ли чел.
    // ближайшее закрытие – объект dCloses
  }
}

Если сейчас закрыт, запускайте таймер обратного отсчёта до объекта dOpens – он означает время открытия в текущей таймзоне.
Ответ написан
@CelDenP
https://megatimer.ru/ Воспользуйся сервисом и не морочь себе голову
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект
22 дек. 2024, в 19:47
3000 руб./за проект