@DeniSidorenko

Как сократить код определения времени работы заведения?

Добрый день, написал код, работает все хорошо, но мне кажется можно было бы куда лучше оптимизировать.
const [working, setWorking] = useState(true)
  const workTime = () => {
    const simpleNotWorking = [6, 7]
    const weekendNotWorking = [6, 7, 8, 9, 10]
    const currentDate = new Date()
    const currentTime = currentDate.getHours()
    const currentDay = currentDate.getDay()

    if (currentDay >= 1 && currentDay <= 5) {
      if (simpleNotWorking.includes(currentTime))
        setWorking(false)
    }
    if (currentDay === 6 || currentDay === 7) {
      if (weekendNotWorking.includes(currentTime)) {
        setWorking(false)
      }
    }
  }


Суть в следующем, есть ресторан, в будни дни работает с 8 утра до 6 утра следующего дня( по будням лишь 2 часа не работают с 6 утра до 8 )
По выходным работают с ( 11 утра до 6 утра)

Я сделал 2 массива в котором указал в котором ресторан не работает
Так же дни недели получаю через getDay ( 1-7)
И прохожусь обычными проверками

Как можно сократить код?
  • Вопрос задан
  • 91 просмотр
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
const closedHours = [[06, 11], [06, 08], [06, 08], [06, 08], [06, 08], [06, 08], [06, 11]];

const workTime = () => {
  const date = new Date();
  const day = date.getDay();
  const hour = date.getHours();
  setWorking(hour < closedHours[day][0] || hour >= closedHours[day][1]);
}
Ответ написан
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Ну, как минимум, можно сократить код проверок:
const closedHours = currentDay === 0 || currentDay === 6
    ? weekendNotWorking
    : simpleNotWorking;

setWorking(closedHours.includes(currentDate.getHours()))


Для гибкости в будущем же лучше вообще сделать объект, где для каждого дня недели будут указаны часы, в которые ресторан закрыт. Тогда всё сведётся вообще к closedHours[now.getDay()].includes(now.getHours())
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы