如果不在同一天,如何处理两个不同的时间?

时间:2019-05-29 12:31:55

标签: javascript reactjs momentjs

我正在处理餐厅的营业时间和关闭时间,我用时间来解析时间,它可以完美地工作,但是在某些情况下,它不起作用, 如果餐厅在上午9:00营业,第二天上午1:00营业,那么无论何时,餐厅都会关闭。

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

5 个答案:

答案 0 :(得分:2)

我为这类问题所做的实际上是说餐厅营业两次。从00:00到01:00一次,从09:00到00:00一次。这样,如果时间验证了这些间隔中的任何一个,则餐厅必须营业。

这种方法与您的处理方式非常相似,例如午餐休息时间,下午12:00至14:00之间商店或餐厅关闭。

答案 1 :(得分:1)

对于不带日期的通用解决方案,您还可以先测试close_hour是否在open_hour之前,如果是,请使用isAfter(opening_hour) || isBefore(opening_hour)

注意:如果close_hour不是一刻,那么第一行将是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 :(得分:0)

您可以将日期和时间一起使用。 或者,您也可以将日期和时间转换为纪元,然后尝试比较

例如-

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之间。

答案 3 :(得分:0)

另一种方法是节省开放时间和工作时间:


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');
}

答案 4 :(得分:-2)

您还应该将打开/关闭字符串更改为moment对象。

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/