#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
Для следующей смены это не работает.
- Смена с 10:30 до 16:30
- Смена с 16:30 до 00:30
- Смена с 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
}