为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

海绵宝宝撒 2022-05-14 13:43:28
我正在尝试使用循环内的时刻来确定两个日期之间有多少个 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:002020-03-09 11:00预期的 :2020-03-09 11:002020-03-09 11:30奇怪的代码片段有效,但在我的电脑或 https://playcode.io/上却没有
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

一种解决方法是使用 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) {

      timeSlots.push(moment.utc(startDate));

      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) {

  timeSlots.push(startDate.clone());

  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>


查看完整回答
反对 回复 2022-05-14
  • 1 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号