#javascript #datetime #luxon
Вопрос:
У меня есть даты UTC, хранящиеся в коллекции примерно так:
"orderBeforeStartTime" : ISODate("2021-03-20T14:00:00.000Z"),
"orderBeforeEndTime" : ISODate("2021-03-20T16:00:00.000Z")
Я хочу сделать цикл, который начинается orderBeforeStartTime
и заканчивается, orderBeforeEndTime
чтобы заполнить массив временными интервалами.
Поэтому, например, используя приведенные выше данные, я должен получить массив как таковой:
['14:00', '14:30', '15:00', '15:30', '16:00'];
Между каждым номером должен быть интервал в 30 минут, пока я не достигну orderBeforeEndTime
.
Мой код:
const { DateTime } = require("luxon");
let startDate;
const endDate = DateTime.fromHTTP(
item.timeSegment.orderBeforeEndTime.toUTCString()
);
if (new Date() > item.timeSegment.orderBeforeStartTime) {
startDate = DateTime.utc();
} else {
startDate = DateTime.fromHTTP(
item.timeSegment.orderBeforeStartTime.toUTCString()
);
}
while (startDate <= endDate) {
item.orderTimeSegments.push(
startDate.toLocaleString(DateTime.TIME_24_SIMPLE)
);
startDate = startDate.plus({ minutes: 30 });
}
Это правильный способ сделать это?
Комментарии:
1. Вы читали документацию ? Есть
plus
метод, который добавит длительность к дате. Сделайте продолжительность 30 минут, добавляйте ее доorderBeforeStartTime
тех пор, пока она не станетorderBeforeEndTime
…2. Спасибо, я обновил свой пост кодом, чтобы проверить, правильна ли моя логика