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
不是中断(其中断结束)。同样的方式另一个阵列太棒了,很高兴听到这个!!太好了,很高兴听到这个!!