我正在处理餐厅的营业时间和关闭时间,我用时间来解析时间,它可以完美地工作,但是在某些情况下,它不起作用, 如果餐厅在上午9:00营业,第二天上午1:00营业,那么无论何时,餐厅都会关闭。
if (current_time.isBetween(opening_hour, close_hour)) {
console.log('its open');
} else {
console.log('its closed');
}
答案 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")
}