2017-09-12 96 views
1

我正在使用fullcalendar,并且要在8月至11月的月份(星期一)重复一次事件。我已经能够重复这个事件,但是这个事件在一个星期一的每个星期的一个月内重复四次,而我需要它在开始日期之后的第一个星期一重复一次。日期范围低于DOW(星期几)参数。Fullcalendar重复事件

var repeatingEvents = [{ 
title:"My repeating event", 
id: 1, 
start: '10:00', 
end: '14:00', 
dow: [ 1, 4 ], 
ranges: [{ //repeating events are only displayed if they are within at least one of the following ranges. 
    start: moment().startOf('week'), //next two weeks 
    end: moment().endOf('week').add(7,'d'), 
},{ 
    start: moment('2015-02-01','YYYY-MM-DD'), //all of february 
    end: moment('2015-02-01','YYYY-MM-DD').endOf('month'), 
},/*...other ranges*/], 
},/*...other repeating events*/]; 

有没有什么办法可以在一个月内重复一遍,运行它从开始日期到结束日期?任何援助,将不胜感激

回答

2

如果不能产生作为@ADyson建议在服务器端的事件,你可以在Javascript中做到这一点。这将找到指定的开始日期和结束日期之间的月份的第一个星期一。

var id=0, event, events = [], 
    start=moment('2017-08-01'), 
    end=moment('2017-10-31'); 

while (start.isBefore(end)) { 
    id++; 
    if (start.day() === 'Monday') { 
     day = start.format('YYYY-MM-DD'); 
    } else { 
     day = start.add(1, 'weeks').startOf('isoWeek').format('YYYY-MM-DD'); 
    } 
    event = { 
     title:"My repeating event", 
     id: id, 
     start: day + ' 10:00:00', 
     end: day + ' 14:00:00', 
    } 
    events.push(event); 
    start.add(1, 'month').startOf('month'); 
} 

然后用你的构造事件的数组在您的日历:

$('#calendar').fullCalendar({ 
    events: events, 
    // ... 
0

不幸的是这种事情没有内置的支持。如果你想使用像你所示的“范围”数组,这是一个完全自定义的属性,所以你需要一些自定义代码来处理它们。看起来你已经在这个答案中使用了相同的结构:Recurring Events in FullCalendar。在这种情况下,您还需要在回答中显示的“eventRender”回调中使用自定义代码,以便应用范围定义。

另一种解决方案是简单地以使它产生一个单独的事件对象到JSON针对其该请求fullCalendar日期范围内所需要的事件的每个所需的重复改变你的服务器端代码。