Как я могу определить, на какую рабочую смену приходится текущее время?

#javascript #datetime

#javascript #дата и время

Вопрос:

В настоящее время я получаю день недели в зависимости от текущей даты:

 var d = new Date();
var day = ["Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sabado"];
value =day[d.getDay()] ;
 

Теперь то, что я хочу сделать, это получить смену в зависимости от времени суток, например:

1-я смена = с 9:00 утра до 1:00 вечера.

2-я смена = с 1:00 до 11:00 вечера.

3-я смена = с 11:00 вечера до 9:00 утра.

Каков был бы наиболее правильный способ получить очередь с помощью javascript?

Ответ №1:

9 утра = 9 часов, 1 час дня = 13 часов, 11 вечера = 21 час, поэтому просто используйте серию операторов if:

 let shift;
const hours = d.getHours();
if (hours >= 9 amp;amp; hours < 13) {
    shift = 1;
} else if (hours >= 13 amp;amp; hours < 21) {
    shift = 2;
} else {
    shift = 3;
}
 

Ответ №2:

В некоторых случаях это решение работает неправильно или, возможно, я что-то упускаю. @Aplet123

Для следующей смены это не работает.

  1. Смена с 10:30 до 16:30
  2. Смена с 16:30 до 00:30
  3. Смена с 00:30 до 06:30

А текущее время — 18:30. Итак, согласно деталям смены, shift 2 должен быть активирован, но он активирует shift 3.

Поэтому мое решение состоит в том, чтобы упорядочить всю смену в порядке убывания, а затем сравнить время начала только с текущим временем.

 shift_details = _.orderBy(shift_details, ['start_time'],['desc']);
if(moment().utc().format('HHmm') >= moment(shift_details[0].start_time).format('HHmm')){
    // do something
} else if(moment().utc().format('HHmm') >= moment(shift_details[1].start_time).format('HHmm')){
    // do something
} else {
    // do something
}