#javascript #timetable #timeslots
#javascript #расписание #временные интервалы
Вопрос:
У меня есть время начала и время окончания в школе. и я хочу сгенерировать расписание для этой школы, используя время начала и время окончания и заданный временной интервал.
Время составляет 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
}
ЕСЛИ временной интервал равен 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
таким образом, мне нужен массив, чтобы я мог печатать каждый временной интервал при создании расписания.
Ответ №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}