javascript - 使用 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'
]
我错过了什么?
解决方案
推荐阅读
- java - 如果字符串是某个字母,我如何获取用户输入并用某个字符替换字符串的最后 2 位数字
- css - 如何使溢出对象可滚动或从右侧开始?
- python - 需要帮助破解python中的A*(A星)算法
- npm - 升级 yarn 似乎可以工作,但没有,安装了 nvm
- sql - 前一个分区 ID 更改时重置 ROW_NUMBER()
- react-native - 如何将手势响应系统与 Pressable 的 pressretentionoffset 道具结合使用?
- javascript - 悬停时的Javascript停止循环?
- azure - azure 上的应用服务已关闭。对我来说没有意义的多个错误
- c++ - 使用 spdlog 时“无法格式化参数”
- javascript - 使用 discord.js 和 ytdl API 通过机器人播放音乐时的性能问题