我正在使用完整的日历,我正在尝试查看创建的事件是否与午餐休息时间重叠,我已将其定义为营业时间的一部分。这是我的代码
function isCalendarEventOverlappingBusinessHour(event)
{
var evts = businessHoursArr;
for (i in evts)
{
var start_moment=moment(evts[i].start, 'MMM DD').format();
var end_moment=moment(evts[i].end);
if (event.start.isBefore(end_moment) && event.end.isAfter(start_moment))
{
return true;
}
}
return false;
}
我无法比较事件开始和营业时间开始,因为在营业时间,时间以字符串格式定义为08:00:00
。我想将它转换成片刻,以便我可以比较时间。有谁能建议一种方法?
我的活动采用以下格式:
events.push({
id: guid(),
title: eventTitle,
start: moment(date),
end: moment(date).add(defaultTimedEventDuration,'hours'),
stick: true,
});
我的businesshoursarr看起来像
{
dow:[1,2,3,4,5]
start:08:00:00
end:12:00:00
},
{
dow:[1,2,3,4,5]
start:13:00:00
end:17:00:00
}
答案 0 :(得分:0)
我建议moment(value, 'HH:mm:ss').valueOf()
将返回一个整数,你可以只比较那时的数字。
如果您提供businessHoursArr
和event
的示例,也会有所帮助。
更新:接受您的代码并进行一些修改,这应该会给您一般的想法。
function isCalendarEventOverlappingBusinessHour(event) {
var evts = businessHoursArr;
var overlapping = false;
var dayFormat = 'YYYYMMDD';
var secFormat = dayFormat + 'HH:mm:ss';
var eventStartDate = event.start.format(dayFormat);
var eventEndDate = event.end.format(dayFormat);
for (i in evts) {
var start_moment = moment(eventStartDate + evts[i].start, secFormat);
var end_moment = moment(eventEndDate + evts[i].end, secFormat);
if (event.start.isBefore(end_moment) && event.end.isAfter(start_moment)) {
overlapping = true;
break;
}
}
return overlapping;
}