1

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

时间是24小时。

前任:-

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
}

IF 时隙为 1 小时

我需要从这些数据中得到的是,

8:30 - 9:30

IF 时隙为 30 分钟

8:30 - 9:00

9:00 - 9:30

另一个例子

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

const endTime = {
   endHour: 2,
   endMinutes: 00
}

对于这种情况,我们不能使用 1 Hour 时间段,因为还有 30 Minutes 。所以我已经验证了,只有我们可以提到 30 分钟时间槽,因此在这种情况下我们只能使用 30 分钟时间槽。

IF 时隙为 30 分钟

8:30 - 9:00

9:00 - 9:30

9:30 - 10:00

10:00 - 10:30

10:30 - 11:00

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

4

1 回答 1

1

考虑使用像 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}
于 2020-09-22T05:31:38.833 回答