Как с помощью moment.js определить, входит ли указанное время в промежуток времён?
Есть 3 динамически изменяемых времени.
1. Время сейчас, к примеру 18:00.
2. Время начала работы, к примеру 10:00.
3. Время конца рабочего дня, 01:00 (Может быть другое 22:00... и т д).
Пытаюсь делать проверку через moment.js
1.isBetween(2,3).
Но проблема в 3 времени, так как оно выходит в будущий день и проверяя, получается что проверка идет от 01:00 до 18:00. А нужно от 18:00 до 01:00. То есть 02:00 не должен срабатывать.
Как отслеживать день и время в таком ключе? И как красивее подобное условие написать, не фигача множество проверок?
Дополнительно:
Спасибо за ответ WbICHA
const isWork = (start, end) => { if (!start || !end) { return false; } const startTime = moment(start, "kk:mm"); const endTime = moment(end, "kk:mm"); const isEndNextDay = endTime.isSameOrBefore(startTime); if (isEndNextDay) { endTime.add(1, "day"); } return moment().isBetween(startTime, endTime, null, "[]"); }; |
const isWork = (start, end) => { if (!start || !end) { return false; } const startTime = moment(start, "kk:mm"); const endTime = moment(end, "kk:mm"); const isEndNextDay = endTime.isSameOrBefore(startTime); if (isEndNextDay) { endTime.add(1, "day"); } return moment().isBetween(startTime, endTime, null, "[]"); };
-
const isWork = (start, end) => { if (!start || !end) { return false; } const startTime = moment(start, "kk:mm") const endTime = moment(end, "kk:mm") const isEndNextDay = endTime.isSameOrBefore(startTime) if(isEndNextDay) { endTime.add(1, 'day') } return moment().isBetween(startTime, endTime, null, '[]'); };
const isWork = (start, end) => { if (!start || !end) { return false; } const startTime = moment(start, "kk:mm") const endTime = moment(end, "kk:mm") const isEndNextDay = endTime.isSameOrBefore(startTime) if(isEndNextDay) { endTime.add(1, 'day') } return moment().isBetween(startTime, endTime, null, '[]'); };
Ответы:
Между 10 и 24 ИЛИ между 24 и 01
- 01:00 Время может быть другим. Это динамически изменяемые данные. В таком случае будет работать?
- Альберт Ушаков, ну это уже смотря как остальное напишешь)
- Так?)
const isWork = (start, end) => { if (!start || !end) { return false; } let diff = moment(start, "kk:mm").diff(moment(end, "kk:mm"), "hours"); if (diff >= 0) { return ( moment().isBetween(moment(start, "kk:mm"), "00:00") || moment().isBetween("00:00", moment(end, "kk:mm")) ); } else { return moment().isBetween(moment(start, "kk:mm"), moment(end, "kk:mm")); } };
const isWork = (start, end) => { if (!start || !end) { return false; } let diff = moment(start, "kk:mm").diff(moment(end, "kk:mm"), "hours"); if (diff >= 0) { return ( moment().isBetween(moment(start, "kk:mm"), "00:00") || moment().isBetween("00:00", moment(end, "kk:mm")) ); } else { return moment().isBetween(moment(start, "kk:mm"), moment(end, "kk:mm")); } };
- Альберт Ушаков, я ваши моменты не шарю) я тебе написал просто что день на два промежутка можно разбить и попадание в один из них равносильно попаданию в исходный
- imko, Понял-принял) Пойду копаться дальше. Но по факту вроде правильно. Спасиб за напутствие)
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для определения, входит ли указанное время в промежуток времен с помощью moment.js, можно воспользоваться методом isBetween(). Этот метод позволяет проверить, находится ли указанная дата/время между двумя другими датами/временами.
Пример использования метода isBetween() в moment.js для определения, входит ли указанное время в промежуток времен:
// Импортируем moment.js const moment = require('moment'); // Указываем начальную и конечную даты/времена const startDate = moment('2022-01-01 00:00:00'); const endDate = moment('2022-01-31 23:59:59'); // Указываем проверяемое время const checkDate = moment('2022-01-15 12:00:00'); // Проверяем, входит ли checkDate в промежуток между startDate и endDate if (checkDate.isBetween(startDate, endDate)) { console.log('Указанное время находится в промежутке между начальной и конечной датами/временами.'); } else { console.log('Указанное время НЕ находится в промежутке между начальной и конечной датами/временами.'); }
В этом примере мы импортируем moment.js, указываем начальную и конечную даты/времена, а затем проверяем, входит ли указанное время в промежуток между этими датами/временами с помощью метода isBetween(). Если указанное время находится в указанном промежутке, выводится соответствующее сообщение.
Таким образом, вы можете легко определить, находится ли указанное время в промежутке времен с помощью moment.js, используя метод isBetween().