首页 > 解决方案 > 使用 Moment js 迭代检查 Google Calendar API 中的可用性

问题描述

我正在尝试编写一个约会调度程序后端(使用 node.js)来检查日历上有哪些可用的时间段(使用 Google Calendar API)。然后获取该查询并将其传递给日期函数。一旦有了查询,该函数就会创建一个 30 分钟的可用时间段数组,同时检查该时间范围是否在日历的繁忙查询中。如果插槽的时间范围在另一个事件之间,它应该继续前进而不是将其推送到数组中。

当我有一些占用的插槽时,我的问题就出现了,它只比较分钟,而不是小时。

  function date(req,res,hours, events){

  var slots = [];
  
  const reqDay = moment(req.body.time);
  var rightNow  = moment(reqDay).hours(hours.start);
  var cutoff =  moment(reqDay).hours(hours.end)
  var duration = moment.duration({'minutes' : 30});
  
 
  for( rightNow ; rightNow.isBefore(cutoff) ; rightNow.add(duration) ){
    // Check if we're going beyond the daily cutoff, go to the next day
    if(rightNow.isAfter(moment(rightNow).hour(hours.end))){
      rightNow.add(1, 'days').hour(hours.start);
    }
    const range1 = moment.range(rightNow, moment(rightNow).add(30, 'minutes'))
    for (var i = 0; i < events.length; i ++ ) {
      const prevRange = moment.range(events[i][0], events[i][1])
      if(range1.overlaps(prevRange)){
        console.log(rightNow)
        rightNow.add(duration)
      }else {
        if (i = events.length) {
          slots.push(rightNow.format('HH:mm'));
        }else {
          i ++
        }
      }
    }
  }
  console.log(slots)
  res.json(slots);
}

当我从谷歌日历检索繁忙查询时,我得到这个控制台日志:(这些是繁忙的)

  [
  [
    Moment<2020-10-12T10:30:00-03:00>,
    Moment<2020-10-12T13:15:00-03:00>
  ],
  [
    Moment<2020-10-12T16:30:00-03:00>,
    Moment<2020-10-12T17:30:00-03:00>
  ]
]

但是当我控制台记录插槽时,我得到了这个:

[
  '10:00', '11:00',
  '12:00', '13:00',
  '13:30', '14:00',
  '14:30', '15:00',
  '15:30', '16:00',
  '16:30', '17:00',
  '17:30'
]

我错过了什么?

标签: javascriptnode.jsmomentjsgoogle-calendar-api

解决方案


推荐阅读