将HH:MM:SS字符串转换为时刻

时间:2018-02-02 03:31:22

标签: javascript fullcalendar momentjs

我正在使用完整的日历,我正在尝试查看创建的事件是否与午餐休息时间重叠,我已将其定义为营业时间的一部分。这是我的代码

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
}

1 个答案:

答案 0 :(得分:0)

我建议moment(value, 'HH:mm:ss').valueOf()将返回一个整数,你可以只比较那时的数字。

如果您提供businessHoursArrevent的示例,也会有所帮助。

更新:接受您的代码并进行一些修改,这应该会给您一般的想法。

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;
}