使用 moment.js 生成进入第二天的 30 分钟时间段

Generating 30 minutes time slots going into next day using moment.js

var x = {
    next-slot: 30,
    start-time: '21:00',
    end-time: '05:00'
}

我想生成时隙,从开始时间到结束时间。输出应该是

[21:00, 21:30, 22:00, 22:30, 23:00, 23:30, 00:00, 00:30, 01:00, 01:30, 02:00, 02:30, 03:00, 03:30, 04:00, 04:30]

我正在做以下逻辑工作(低于日期范围) 开始时间:'05:00', 结束时间:'21:00' 不适用于:(低于日期范围) 开始时间:'21:00', 结束时间:'05:00'

const hours = [];
          for (
            let hour = Number(start-time[0]);
            hour <= Number(end-time[0]);
            hour++
          ) {
              hours.push(moment({ hour }).format('kk:mm'));
              hours.push(
                moment({
                  hour,
                  minute: 30,
                }).format('kk:mm')
              );
          }

这就是您所需要的。要获得时间,您将使用 HH:mm 格式作为数据中的开始时间。

你的 end time 是在 next 天,所以我们需要使用 moment.js add() 函数,我们将使用它来添加 1 天结束时间。

接下来,在遍历时间的同时,我们将设置 data 的间隔,该间隔设置为 moment.js 分钟 30

运行 下面的代码片段以查看它是否正常工作。

//Data
let x = {
  slotInterval: 30,
  openTime: '21:00',
  closeTime: '05:00'
};

//Format the time
let startTime = moment(x.openTime, "HH:mm");

//Format the end time and the next day to it 
let endTime = moment(x.closeTime, "HH:mm").add(1, 'days');

//Times
let allTimes = [];

//Loop over the times - only pushes time with 30 minutes interval
while (startTime < endTime) {
  //Push times
  allTimes.push(startTime.format("HH:mm")); 
  //Add interval of 30 minutes
  startTime.add(x.slotInterval, 'minutes');
}

console.log(allTimes);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>