如何计算时间表两次之间的时隙
How to calculate timeslots between two times for a timetable
我在学校有开始时间和结束时间。我想使用 开始时间 和 结束时间 并给定 时间段 为该学校生成一个时间表。
Time is 24 hours.
例如:-
const startingTime = {
startHour: 8,
startMinutes: 30
}
const endTime = {
endHour: 17,
endMinutes: 30
}
我还可以提到一个时间段。有两种时隙类型(1 小时 或 30 分钟)。
设置完所有这些参数后,我需要一个包含开始时间和结束时间之间的所有时隙的数组。
我举个简单的例子
我校的开始时间和结束时间如下,
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 这样的日期和时间库 (https://moment.github.io/luxon/index.html)
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}
我在学校有开始时间和结束时间。我想使用 开始时间 和 结束时间 并给定 时间段 为该学校生成一个时间表。
Time is 24 hours.
例如:-
const startingTime = {
startHour: 8,
startMinutes: 30
}
const endTime = {
endHour: 17,
endMinutes: 30
}
我还可以提到一个时间段。有两种时隙类型(1 小时 或 30 分钟)。
设置完所有这些参数后,我需要一个包含开始时间和结束时间之间的所有时隙的数组。
我举个简单的例子
我校的开始时间和结束时间如下,
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 这样的日期和时间库 (https://moment.github.io/luxon/index.html)
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}