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

dar*_*sad 2 javascript momentjs angular moment-timezone

var x = {
    next-slot: 30,
    start-time: '21:00',
    end-time: '05:00'
}
Run Code Online (Sandbox Code Playgroud)

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

[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]
Run Code Online (Sandbox Code Playgroud)

我正在做以下逻辑它适用于(低于日期范围)开始时间:'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')
              );
          }
Run Code Online (Sandbox Code Playgroud)

Alw*_*ing 7

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

end time你在next的日子,所以我们需要使用moment.js 的add() ,我们将使用添加功能1一天结束时间。

而接下来我们会从我们的设置间隔时间loping超过data其设定为30moment.js分钟

运行下面的代码片段以查看它的工作情况。

//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);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>
Run Code Online (Sandbox Code Playgroud)