在循环内使用时刻时的奇怪结果

我正在尝试使用循环内的时刻来确定两个日期之间有多少个 60 分钟的时间段,但我得到了奇怪的结果。


const timeSlots: Moment[] = [];


let startDate = moment('2020-03-09 11:00');

let endDate = moment('2020-03-09 12:30');


while (endDate.diff(startDate, 'minutes') >= 60) {

  timeSlots.push(startDate.clone());

  startDate.add(30, 'minutes');

}


console.log(timeSlots);

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

结果 :


2020-03-09 11:00

2020-03-09 11:00

预期的 :


2020-03-09 11:00

2020-03-09 11:30

奇怪的代码片段有效,但在我的电脑或 https://playcode.io/上却没有


海绵宝宝撒
浏览 77回答 1
1回答

一只斗牛犬

一种解决方法是使用 unix 时间戳进行计算。一小时有 3600 秒 = 3600000 毫秒:const timeSlots = [];let startDate = moment.utc('2020-03-09 11:00').valueOf();let endDate = moment.utc('2020-03-09 14:30').valueOf();while ((endDate-startDate) >= 3600000) {&nbsp; &nbsp; &nbsp; timeSlots.push(moment.utc(startDate));&nbsp; &nbsp; &nbsp; startDate += 3600000;}console.log(timeSlots.map(slot => slot.toString()));<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>更新:经过一些研究,似乎该console.log(timeSlots)声明是问题所在。这会记录一些我们不应该关心的内部属性。如果我们使用,它似乎按预期工作:const timeSlots = [];let startDate = moment('2020-03-09 11:00');let endDate = moment('2020-03-09 12:30');while (endDate.diff(startDate, 'minutes') >= 60) {&nbsp; timeSlots.push(startDate.clone());&nbsp; startDate.add(30, 'minutes');}console.log(timeSlots.map(slot => slot.format()));<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript