Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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 如何计算时间表两次之间的时隙_Javascript_Timetable_Timeslots - Fatal编程技术网

Javascript 如何计算时间表两次之间的时隙

Javascript 如何计算时间表两次之间的时隙,javascript,timetable,timeslots,Javascript,Timetable,Timeslots,我在学校有开始时间和结束时间。我想使用开始时间和结束时间以及给定的时间段为该学校生成一个时间表 时间是24小时 例:- 我还可以提到很多时间段。有两种时隙类型(1小时或30分钟) 设置完所有这些参数后,我需要一个数组,其中包含开始时间和结束时间之间的所有时隙 我将给出一个简单的例子 const startingTime = { startHour: 8, startMinutes: 30 } const endTime = { endHour: 2, endMinute

我在学校有开始时间和结束时间。我想使用开始时间结束时间以及给定的时间段为该学校生成一个时间表

时间是24小时

例:-

我还可以提到很多时间段。有两种时隙类型(1小时30分钟

设置完所有这些参数后,我需要一个数组,其中包含开始时间和结束时间之间的所有时隙

我将给出一个简单的例子

const startingTime = {
   startHour: 8,
   startMinutes: 30
}

const endTime = {
   endHour: 2,
   endMinutes: 00
}
我的学校的开始时间和结束时间如下

const startingTime = {
   startHour: 8,
   startMinutes: 30
}

const endTime = {
   endHour: 9,
   endMinutes: 30
}
如果时隙为1小时

从这些数据中我需要的是

8:30-9:30

如果时隙为30分钟

8:30-9:00

9:00-9:30

另一个例子

const startingTime = {
   startHour: 8,
   startMinutes: 30
}

const endTime = {
   endHour: 2,
   endMinutes: 00
}
对于这种情况,我们不能使用1小时的时隙,因为还有30分钟。所以我已经验证了,只有我们可以提到30分钟的时隙,所以在这个场景中,我们只能使用30分钟的时隙

如果时隙为30分钟

8:30-9:00

9:00-9:30

9:30-10:00

10:00-10:30

10:30-11:00


像这样,我需要一个数组,这样我可以在生成时间表时打印每个时间段。

考虑使用像Luxon()这样的日期和时间库

const slot=Duration.fromMillis(1800000)//30:00分钟
常数周期={
startTime:DateTime.local(2020,1,1,8,30),
endTime:DateTime.local(2020,1,1,10,0)
}
var插槽=[];
var slotCount=Math.trunc((period.endTime.toMillis()-period.startTime.toMillis())/slot.millis);
对于(变量i=0;i({
startHour:x.startTime.hour,
startMinutes:x.startTime.Minutes,
结束时间:x.startTime.plus(插槽).hour,
endMinutes:x.startTime.plus(插槽)。分钟,
}));
console.log(格式化插槽);
//打印出:
//0:{开始时间:8,开始分钟:30,结束小时:9,结束分钟:0}
//1:{开始时间:9,开始分钟:0,结束小时:9,结束分钟:30}
//2:{开始时间:9,开始分钟:30,结束小时:10,结束分钟:0}
const slot = Duration.fromMillis(1800000) // 30:00 minutes

const period = {
    startTime: DateTime.local(2020, 1, 1, 8, 30),
    endTime: DateTime.local(2020, 1, 1, 10, 0)
}

var slots = [];
var slotCount = Math.trunc((period.endTime.toMillis() - period.startTime.toMillis()) / slot.milliseconds);
for (var i = 0; i < slotCount; i++) {
    slots[i] = {
        startTime: period.startTime.plus(i * slot.milliseconds),
        endTime: period.startTime.plus((i + 1) * slot.milliseconds)
    }
}

var formattedSlots = slots.map(x => ({
    startHour: x.startTime.hour, 
    startMinutes: x.startTime.minute,
    endHour: x.startTime.plus(slot).hour,
    endMinutes: x.startTime.plus(slot).minute,
}));

console.log(formattedSlots);
// Prints out:
// 0: {startHour: 8, startMinutes: 30, endHour: 9, endMinutes: 0}
// 1: {startHour: 9, startMinutes: 0, endHour: 9, endMinutes: 30}
// 2: {startHour: 9, startMinutes: 30, endHour: 10, endMinutes: 0}