Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 利用矩Js生成时隙_Javascript_Loops_Momentjs_Timeslots - Fatal编程技术网

Javascript 利用矩Js生成时隙

Javascript 利用矩Js生成时隙,javascript,loops,momentjs,timeslots,Javascript,Loops,Momentjs,Timeslots,我有这样的对象结构 var x = { nextSlot: 30, breakTime: [ ['11:00', '14:00'], ['16:00', '18:00'] ], startTime: '8:00', endTime: '20:00' } 我想划分时间段,从开始时间到结束时间。但我不想考虑时隙中的中断时间。 输出应为 ['08:00','08:30','09:00','09:30','10:00','10:30','14:0

我有这样的对象结构

var x = {
    nextSlot: 30,
    breakTime: [
        ['11:00', '14:00'], ['16:00', '18:00']
    ],
    startTime: '8:00',
    endTime: '20:00'
}
我想划分时间段,从开始时间到结束时间。但我不想考虑时隙中的中断时间。 输出应为

['08:00','08:30','09:00','09:30','10:00','10:30','14:00','14:30','15:00','15:30', '17:30', '18:00', '18:30','19:00','19:30']
我实现了自己的逻辑。但这是有效的;y表示长度为1的中断时间数组

// Check whether the startTime is less than endTime
while (moment(x.startTime, ['HH:mm']).format('HH:mm') < moment(x.endTime, ['HH:mm']).format('HH:mm')) {
    for (let i = 0; i < x.breakTime.length; i++) {
        // if startTime is greater then breakTime[i][0], and if starttime is less then breaktime[i][1], 
        //just add nextSlot to starttime 
        if (moment(x.startTime, ['HH:mm']).format('HH:mm') >= moment(x.breakTime[i][0], ['HH:mm']).format('HH:mm') && moment(x.startTime, ['HH:mm']).format('HH:mm') < moment(x.breakTime[i][1], ['HH:mm']).format('HH:mm')) {
            x.startTime = moment(x.startTime, ['HH:mm']).add(x.nextSlot, 'm').format('HH:mm');
        } else {
        //otherwise, push the time to slot array and then increment it by nextSlot 
            slots.push(moment(x.startTime, ['HH:mm']).format('hh:mm'));
            x.startTime = moment(x.startTime, ['HH:mm']).add(x.nextSlot, 'm').format('HH:mm');
        }
    }
}
//检查开始时间是否小于结束时间
while(矩(x.startTime,['HH:mm']).format('HH:mm')<矩(x.endTime,['HH:mm']).format('HH:mm')){
for(设i=0;i=矩(x.breakTime[i][0],'HH:mm']).format('HH:mm')和&矩(x.startTime,['HH:mm']).format('HH:mm')<矩(x.breakTime[i][1],'HH:mm']).format('HH:mm')){
x、 startTime=力矩(x.startTime,['HH:mm'])。添加(x.nextSlot,'m')。格式('HH:mm');
}否则{
//否则,将时间推送到插槽阵列,然后按nextSlot递增
slots.push(矩(x.startTime,['HH:mm')).format('HH:mm');
x、 startTime=力矩(x.startTime,['HH:mm'])。添加(x.nextSlot,'m')。格式('HH:mm');
}
}
}

如果我在
中断时间
中再添加一个数组元素,则此操作不起作用

var x={
下一批:30,,
休息时间:[
['11:00', '14:00'], ['16:00', '18:00']
],
开始时间:“8:00”,
结束时间:“20:00”
};
var slotTime=力矩(x.startTime,“HH:mm”);
var endTime=力矩(x.endTime,“HH:mm”);
函数isInBreak(时隙、中断时间){
返回中断时间。某些((br)=>{
返回时隙>=时刻(br[0],“HH:mm”)和时隙<时刻(br[1],“HH:mm”);
});
}
让时间=[];
while(时隙<结束时间)
{
如果(!isInBreak(slotTime,x.休息时间)){
推送(slotTime.format(“HH:mm”);
}
slotTime=slotTime.add(x.nextSlot,'minutes');
}
日志(“时隙:”,次)

类似的方法应该可以工作:

var x={
下一批:30,,
休息时间:[
['11:00', '14:00'], ['16:00', '18:00']
],
开始时间:“8:00”,
结束时间:“20:00”
};
var slotTime=力矩(x.startTime,“HH:mm”);
var endTime=力矩(x.endTime,“HH:mm”);
函数isInBreak(时隙、中断时间){
返回中断时间。某些((br)=>{
返回时隙>=时刻(br[0],“HH:mm”)和时隙<时刻(br[1],“HH:mm”);
});
}
让时间=[];
while(时隙<结束时间)
{
如果(!isInBreak(slotTime,x.休息时间)){
推送(slotTime.format(“HH:mm”);
}
slotTime=slotTime.add(x.nextSlot,'minutes');
}
日志(“时隙:”,次)

请添加代码注释,说明您的逻辑尝试执行的操作。使用注释更新它输出的逻辑是什么
11:00
是中断时间,但不在输出中
14:00
是一个中断时间,在输出中
16:00
是中断时间,但不在输出中<代码>17:00
不是中断时间,也不在输出中
18:00
是一个中断时间,但
17:30
18:00
在输出中。请在此处描述您的逻辑休息时间
['11:00',14:00']
,它意味着从
11:00到13:30
,这是一个休息时间<代码>14:00
不是中断(其中断结束)。与其他数组相同,请添加代码注释说明您的逻辑正在尝试执行的操作。使用注释更新它输出的逻辑是什么
11:00
是中断时间,但不在输出中
14:00
是一个中断时间,在输出中
16:00
是中断时间,但不在输出中<代码>17:00
不是中断时间,也不在输出中
18:00
是一个中断时间,但
17:30
18:00
在输出中。请在此处描述您的逻辑休息时间
['11:00',14:00']
,它意味着从
11:00到13:30
,这是一个休息时间<代码>14:00
不是中断(其中断结束)。同样的方式另一个阵列太棒了,很高兴听到这个!!太好了,很高兴听到这个!!