Как справиться с двумя разными временами, если они не в один и тот же день? - PullRequest
0 голосов
/ 29 мая 2019

Я работаю с часами открытия и закрытия ресторана, использую момент для его разбора, и он отлично работает, но есть один случай, когда он не работает, если ресторан открывается в 9:00 и закрывается 1:00утра (на следующий день) ресторан закрывается независимо от времени.

   if (current_time.isBetween(opening_hour, close_hour))  {
     console.log('its open');
   } else {
     console.log('its closed');
   }

Ответы [ 5 ]

2 голосов
/ 29 мая 2019

Для общего решения без упоминания даты, вы также можете сначала проверить, стоит ли close_hour до открытия_часа, и, если это так, используйте isAfter(opening_hour) || isBefore(opening_hour):

ПРИМЕЧАНИЕ: если close_hour не является моментомJs,первая строка будет if (moment(close_hour, 'hh:mm').isAfter(opening_hour)) {

if (close_hour.isAfter(opening_hour)) {
    if (current_time.isBetween(opening_hour, close_hour)) {
        console.log('its open');
    } else {
        console.log('its closed');
    }
} else {
    if (current_time.isAfter(opening_hour) || current_time.isBefore(close_hour)) {
        console.log('its open');
    } else {
        console.log('its closed');
    }
}
2 голосов
/ 29 мая 2019

То, что я делаю для таких проблем, на самом деле говорит, что ресторан открыт дважды. Один раз с 00:00 до 01:00 и один раз с 09:00 до 00:00. Таким образом, если время подтверждает какой-либо из этих интервалов, ресторан должен быть открыт.

Этот подход очень похож на то, как вы работаете, например, на обеденные перерывы, когда магазин или ресторан закрыты между 12:00 и 14:00 во второй половине дня.

0 голосов
/ 29 мая 2019

Другой подход заключается в сохранении рабочего времени и продолжительности работы:


const opening_hour = moment('9:00am', 'hh:mm');
const current_time = moment();

const duration = 16 * 60; //duration in minutes, 16 hours

if (current_time.isBetween(opening_hour, opening_hour.clone().add(duration, 'minutes'))) {
     console.log('its open');
} else {
     console.log('its closed');
}
0 голосов
/ 29 мая 2019

Вы можете использовать дату вместе со временем.Или вы можете также преобразовать дату и время в эпоху, а затем попробовать сравнить

Для Eg-

let d1= new Date('1-1-2019').getTime(); //1546281000000
let d2= new Date('1-2-2019').getTime(); //1546367400000

let current_time= new Date().getTime(); // gives current epoch

Теперь вы можете написать функцию, чтобы проверить, находится ли current_time между d1 и d2.

0 голосов
/ 29 мая 2019

Вы должны также изменить открытые / закрытые строки на моментальный объект.

var opening_time = moment("10:40", 'hh:mm')
var closing_time = moment("23:00", 'hh:mm:ss')

if (moment().isBetween(opening_time, closing_time)) {
  console.log("Open");
} else {
  console.log("Close")
}

https://jsfiddle.net/w7e028fg/

...