Как с помощью moment.js определить, входит ли указанное время в промежуток времён?

Ссылка скопирована
1 ответ

Есть 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, Понял-принял) Пойду копаться дальше. Но по факту вроде правильно. Спасиб за напутствие)
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Виктор Sys Ответ

Для определения, входит ли указанное время в промежуток времен с помощью 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 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().

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно