根据预订时间和预订时间确定可预订的房间

时间:2019-07-29 06:01:29

标签: javascript

我想根据优先级确定选定的预订时间在一个房间还是多个房间中可用?

就像我的预订开始时间为 10:00 ,预订结束时间为 12:00 , 现在,房间1已预订["12:00-13:00"], 已为["12:00-13:00"]预订了room2,并为10:00预订了room3

根据预订时间和预订时间12:0010:00-11:0 room1 中不可用,但 room1 可用于{{1 }} 0和 room2 可用于10:00-12:0 0,但我想为每个房间编号赋予优先级,例如首先我需要先填充 room1 ,然后再填充 room2 < / strong>,然后是 room3 ,因此我想在 room1 中预订10:00-11:00,在 room2 中预订11:00-12:00。那么如何根据我的优先预订时间确定是连续可用还是在两个不同的房间呢?

PS:我不知道如何检查时隙 所以,我尝试了这个:

let bookingTime = ["10:00-12:00"]
let bookedTime = {"room1": ["11:00-12:00", "12:00-13:00". "13:00-14:00"], "room2": ["12:00-13:00"], "room3" : ["12:00-13:00"]}

const avail = (ts, booked) =>
    bookedTime.map(item => {
        const[start, end] = item.split('-');
        const isBooked = booked
            .map(item => item.split('-'))
            .some(([bookedStart, bookedEnd]) =>
                (start >= bookedStart && start < bookedEnd) ||
                (end > bookedStart && end <= bookedEnd) ||
                (bookedStart >= start && bookedStart < end));
        return {slot: `${start}-${end}`, isBooked};
    })

1 个答案:

答案 0 :(得分:0)

这里的关键是,您的预订时间不应与至少一个房间(某些)的所有插槽(每个)重叠。另一点是,您可以根据自己的时间签名构造一个整数,以便于比较。

请查看如何使用Array.someArray.every迭代器来实现上述逻辑。

var  bookingTime = ["10:00-12:00"]
var  bookedTime = {"room1": ["11:00-12:00", "12:00-13:00", "13:00-14:00"], "room2": ["12:00-13:00"], "room3" : ["12:00-13:00"]}





function isBooked(bookingTime, bookedTime) {


    //Convert the start and end times to integers - se we can compare easily
    var bookingStartInt = parseInt(bookingTime.split('-')[0].replace(':', ''));     //Produces int 1000
    var bookingEndInt = parseInt(bookingTime.split('-')[1].replace(':', ''));     //Produces int 1000


    return Object.keys(bookedTime).some(aRoom => {

        return bookedTime[aRoom].every(aSlot => {
        
            //Convert each slot to start and end integers
            var slotStartInt = parseInt(aSlot.split('-')[0].replace(':', ''));     
            var slotEndInt = parseInt(aSlot.split('-')[1].replace(':', ''));        

            //Compare if booking time overlaps with the current time slot
            return !(bookingStartInt < slotStartInt && bookingEndInt <= slotStartInt || bookingStartInt >= slotEndInt && bookingEndInt > slotEndInt); 

        })
    })
  

}



console.log(isBooked(bookingTime[0], bookedTime));