使用 luxon 在两个日期之间循环以创建时间间隔

Exh*_*ler 5 javascript datetime luxon

我将 UTC 日期存储在集合中,如下所示:

"orderBeforeStartTime" : ISODate("2021-03-20T14:00:00.000Z"),
"orderBeforeEndTime" : ISODate("2021-03-20T16:00:00.000Z")
Run Code Online (Sandbox Code Playgroud)

我想做一个从 开始orderBeforeStartTime并结束于 的循环orderBeforeEndTime,以用时间间隔填充数组。

因此,例如使用上面的数据,我应该得到一个这样的数组:

['14:00', '14:30', '15:00', '15:30', '16:00'];
Run Code Online (Sandbox Code Playgroud)

每个数字之间应该有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 });
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?

Cus*_*dio 7

根据文档,有一种方法可以迭代给定的 Interval DurationObjectUnits

const start = new Date("2021-03-20T14:00:00.000Z");
const end = new Date("2021-03-20T16:00:00.000Z");

const interval = Interval.fromDateTimes(
  DateTime.fromJSDate(start),
  DateTime.fromJSDate(end)
);

const desiredArray = interval.splitBy({ minutes: 30 }).map((d) => d.start);
Run Code Online (Sandbox Code Playgroud)

可能的分裂

export interface DurationObjectUnits {
    year?: number | undefined;
    years?: number | undefined;
    quarter?: number | undefined;
    quarters?: number | undefined;
    month?: number | undefined;
    months?: number | undefined;
    week?: number | undefined;
    weeks?: number | undefined;
    day?: number | undefined;
    days?: number | undefined;
    hour?: number | undefined;
    hours?: number | undefined;
    minute?: number | undefined;
    minutes?: number | undefined;
    second?: number | undefined;
    seconds?: number | undefined;
    millisecond?: number | undefined;
    milliseconds?: number | undefined;
}
Run Code Online (Sandbox Code Playgroud)