Fullcalendar 如何在完整日历插件中显示每月重复的事件

Fullcalendar 如何在完整日历插件中显示每月重复的事件,fullcalendar,Fullcalendar,有了这段代码,我可以显示每日和每周事件,但我无法显示每月事件。我在我的一个laravel项目中使用了完整的日历插件。通过使用dow参数,我可以显示每日事件,范围显示事件表单开始日期 $('#calendar').fullCalendar({ defaultDate: moment(), editable: false, eventLimit: true, // allow "more" link when too many events

有了这段代码,我可以显示每日和每周事件,但我无法显示每月事件。我在我的一个laravel项目中使用了完整的日历插件。通过使用dow参数,我可以显示每日事件,范围显示事件表单开始日期

      $('#calendar').fullCalendar({
      defaultDate: moment(),
      editable: false,
      eventLimit: true, // allow "more" link when too many events
      events:function(start, end, timezone, callback){
        $.ajax({url: baseUrl +"/calenderevents",
                type:'post',
                success: function(data)
                {
                    var events = [];
                    var range  = [];
                    $.each(data, function(index, element) {
                        events.push({
                            title       : element.title,
                            start       : element.start,
                            end         : element.end,
                            id          : element.id,
                            dow         : element.dow,
                            ranges      : range
                        });

                        range.push({
                                start: moment(element.ranges)
                        });
                 });

                callback(events);

                }
            });
      },
      dayClick: function() {
                $('#event-message').text("Add Activity");
                $('#calender-error').html('');
                if($("#user_role_id").data("user-role") == 1){
                 return false;
                }

                $("#delete-event").hide();
                $('.dimensions').attr('readonly', 'readonly');
                $('#clear-form').click();
                $('.calender-event').attr({
                                        'id':'calender_event_form',
                                        'action':baseUrl+'/assisted',
                                        });
                $.fancybox({
                    content: $('#add_calender_event'),
                    padding : 10,
                    fitToView:false,
                    autoSize: false,
                    width:485,
                    height:600,
                    openEffect : 'elastic',
                    closeEffect : 'elastic',
                    });
            },
      eventRender: function (event, element) {
        // element.addClass('href', 'javascript:void(0);');
        element.addClass('event');
        element.attr('id', event.id);

        if("ranges" in event)
        {
            return (event.ranges.filter(function(range){ // test event against all the ranges
                return (event.start.isAfter(range.start));
            }).length)>0;
        }

      }
    });
var-date=新日期();
var d=date.getDate();
var m=date.getMonth();
var y=date.getFullYear();
var defaultEvents=[
{id:'${periodicTask.id}',标题:'${periodicTask.task}',
开始:“10:00”,//开始时间(本例中为上午10点)
end:'14:00',//结束时间(本例中为下午6点)
范围:[{//重复事件仅在下列范围之一内时显示。
开始:时刻(新日期('${periodicTask.startDate}')).startOf('year'),//接下来的两周
结束:时刻(新日期('${periodicTask.endDate}'))。添加(7,'d'),
}]
,键入:'${periodicTask.description}',位置:'${periodicTask.location.name}',结束日期:新日期('${periodicTask.endDate}'),区域:'${periodicTask.area.name}',频率:'${periodicTask.frequency}',起始日期:新日期('${periodicTask.startDate}'),重复:0,颜色:“{Math.random().toString(16).切片(2,8),道:[${periodicTask.day},
{id:'${periodicTask.id}',标题:'${periodicTask.task}',开始:新日期(y,m,${periodicTask.startDay}',结束:新日期(y,m,${periodicTask.endDay}',24,0,0,0),类型:'${periodicTask.description}',区域:'${periodicTask.area name}',开始日期:'${periodicTask.startDate}',频率:'${periodicTask.frequency}',位置:''${periodicTask.location.name}',重复:1,结束日期:新日期('${periodicTask.endDate}'),颜色:“#”+Math.random().toString(16).slice(2,8)},
];
//表示每月重复标志的任何值
var REPEAT_每月=1;
//表示年度重复标志的任何值
var REPEAT_年=2;
函数Unix_时间戳(t)
{
var dt=新日期(t*1000);
var hr=dt.getHours();
var m=“0”+dt.getMinutes();
var s=“0”+dt.getSeconds();
返回dt;
}
$(“#日历”).fullCalendar({
标题:{
左:“上一个,下一个”,
中心:'标题',
右图:“月,基本周,基本日”
},  
displayEventTime:false,
eventLimit:对,
是的,
eventMouseover:函数(数据、事件、视图){
//$('#'+data.id).工具提示('show')
工具提示=“+”标题“+”:-“+data.title+”
“+”说明“+”:-“+data.type+”
“+”位置“+”:-“+data.location+”
“+”频率“+”:-“+data.Frequency+”
“+”区域“+”:-“+data.Area+”; 如果(data.frequency==‘每周’){ var weekday=[“周日”、“周一”、“周二”、“周三”、“周四”、“周五”、“周六”]; 工具提示+='
'+'Day'+':-'+工作日[data.dow]+'
'; }否则{ 工具提示+='
'+'开始日期'+':-'+data.startDate+'
结束日期'+':-'+data.endDate+'
'; } $(“正文”).append(工具提示); $(此).mouseover(函数(e){ $(this.css('z-index',10000); $('.tooltip').fadeIn('500'); $('.tooltip').fadeTo('10',1.9); }).mousemove(函数(e){ $('.tooltip').css('top',e.pageY+10); $('.tooltip').css('left',e.pageX+20); }); }, eventDrop:函数(事件、增量、恢复函数){ 游泳({ 标题:“你确定吗?”, 键入:“警告”, showCancelButton:true, confirmButtonColor:#DD6B55“, confirmButtonText:“是的,重新安排它!” }, 功能(isConfirm){ 如果(我确认) { window.location=“${pageContext.request.contextPath}/task/periodic task schedule update/”+event.id+“/”+event.start.format()+“/”+新日期(event.start.getDay(); } 否则{ 回复函数() } }); }, eventMouseout:函数(数据、事件、视图){ $(this.css('z-index',8); $('.tooltip').remove(); }, 事件:函数(开始、结束、时区、回调){ /*$.ajax({ 类型:“POST”, url:“${pageContext.request.contextPath}/task/calendar定期任务视图”, 数据类型:“json”, 数据:{ 开始:event.start, 结束:event.end }, 成功:功能(doc){ var事件=[]; $(doc).find('event').each(function(){ 事件。推({ 开始:$('#开始').val(''), 结束:$('#结束').val('') }); }); 回调(事件); } }); */ var current_month=新日期($('#calendar').fullCalendar('getDate').format()).getMonth()+1; var current_fullYear=新日期($(“#日历”).fullCalendar('getDate').format()).getFullYear(); var事件=[]; $.each(默认事件、函数(键、事件){ if(Date.parse(new Date(event.endDate))>=Date.parse(new Date($(“#calendar”).fullCalendar($('getDate').format())){ 如果(event.repeat==0){ 变量对象={ 开始:“14:00”,
 var date = new Date();
 var d = date.getDate();
 var m = date.getMonth();
 var y = date.getFullYear();

var defaultEvents = [

    <c:forEach var='periodicTask' items='${periodicTaskTemplates}'>
        <c:choose>
        <c:when test='${fn:containsIgnoreCase(periodicTask.frequency, "Weekly")}'>
                { id: '${periodicTask.id}', title: '${periodicTask.task}',
                     start: '10:00', // a start time (10am in this example)
                        end: '14:00', // an end time (6pm in this example)
                         ranges: [{ //repeating events are only displayed if they are within one of the following ranges.
                            start: moment(new Date('${periodicTask.startDate}')).startOf('year'), //next two weeks
                            end: moment(new Date('${periodicTask.endDate}')).add(7,'d'),
                        }]

                    ,type:'${periodicTask.description}',location:'${periodicTask.location.name}',endDate:new Date('${periodicTask.endDate}'),area: '${periodicTask.area.name}',frequency:'${periodicTask.frequency}', startDate: new Date('${periodicTask.startDate}'),repeat: 0,color: "#"+ Math.random().toString(16).slice(2, 8) ,dow: [${periodicTask.day}]},
        </c:when>
            <c:otherwise>
                { id: '${periodicTask.id}', title: '${periodicTask.task}',start: new Date(y,  m, '${periodicTask.startDay}'), end: new Date(y, m, '${periodicTask.endDay}', 24, 0, 0, 0) ,type:'${periodicTask.description}',area: '${periodicTask.area.name}',startDate: new Date('${periodicTask.startDate}'),frequency:'${periodicTask.frequency}',location:'${periodicTask.location.name}', repeat: 1,endDate:new Date('${periodicTask.endDate}'),  color: "#"+ Math.random().toString(16).slice(2, 8) },
            </c:otherwise>
         </c:choose>
    </c:forEach>
    ];
    // Any value represanting monthly repeat flag
    var REPEAT_MONTHLY = 1;
    // Any value represanting yearly repeat flag
    var REPEAT_YEARLY = 2;
    function Unix_timestamp(t)
    {
        var dt = new Date(t*1000);
        var hr = dt.getHours();
        var m = "0" + dt.getMinutes();
        var s = "0" + dt.getSeconds();
        return dt;  
    }

 $('#calendar').fullCalendar({
        header: {
            left: 'prev,next',
            center: 'title',
            right: 'month,basicWeek,basicDay'
        },  
        displayEventTime: false,            
        eventLimit: true, 
        editable: true,
        eventMouseover: function (data, event, view) {
            //  $('#'+data.id).tooltip('show')
             tooltip = '<div  class="tooltip tooltip-top" style="display:none;position:absolute;border:1px solid #333;background-color:#161616;border-radius:5px;padding:10px;  color:#fff;font-size:12px Arial;;height:auto;position:absolute;z-index:10001;line-height: 150%;">' + 'title ' + ':- ' + data.title + '</br>' + 'description ' + ':- ' + data.type + '</br>' + 'location ' + ':- ' + data.location + '</br>' + 'Frequency ' + ':- ' + data.frequency + '</br>' + 'Area ' + ':- ' + data.area+'';
            if(data.frequency =='Weekly'){
                var weekday = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
                tooltip += '</br>'+'Day' + ':- ' + weekday[data.dow] + '</br></div>';
            }else{
                tooltip += '</br>'+'Start Date  ' + ':- ' + data.startDate + '</br>End Date ' + ':- ' + data.endDate + '</br></div>';
            }
             $("body").append(tooltip);
            $(this).mouseover(function (e) {
                $(this).css('z-index', 10000);
                $('.tooltip ').fadeIn('500');
                $('.tooltip ').fadeTo('10', 1.9);
            }).mousemove(function (e) {
                $('.tooltip ').css('top', e.pageY + 10);
                $('.tooltip ').css('left', e.pageX + 20);
                }); 
        },
        eventDrop: function(event, delta, revertFunc) {
          swal({
                  title: "Are you sure?",
                  type: "warning",
                  showCancelButton: true,
                  confirmButtonColor: "#DD6B55",
                  confirmButtonText: "Yes, Re-Shedule it!"
              },
              function (isConfirm) {
                  if (isConfirm)
                  {
                      window.location = "${pageContext.request.contextPath}/task/periodic-task-shedule-update/"+event.id+"/"+event.start.format()+"/"+new Date(event.start).getDay() ;
                  }
                  else{
                      revertFunc()
                  }
              });
          },
          eventMouseout: function (data, event, view) {
              $(this).css('z-index', 8);
              $('.tooltip ').remove();
          },
        events: function(start, end, timezone, callback) {
       /*    $.ajax({
                type: "POST",
                url: "${pageContext.request.contextPath}/task/calendar-periodic-task-view",
                dataType: 'json',
                data: {
                  start: event.start,
                  end: event.end
                },
                success: function(doc) {
                      var events = [];
                        $(doc).find('event').each(function() {
                          events.push({
                            start:  $('#start').val(''),
                            end: $('#end').val('')
                          });
                        });
                        callback(events);
                      } 
            }); */
            var current_month = new Date($('#calendar').fullCalendar('getDate').format()).getMonth()+1;
            var current_fullYear = new Date($('#calendar').fullCalendar('getDate').format()).getFullYear();
            var events = [];
            $.each(defaultEvents, function(key, event) {
                if (Date.parse(new Date(event.endDate)) >= Date.parse(new Date($('#calendar').fullCalendar('getDate').format()))) {
                        if(event.repeat ===0  ){
                            var objevent={
                                        start: "14:00",
                                        color:event.color,
                                        id:event.id,
                                        location:event.location,
                                        repeat:event.repeat,
                                        title:event.title,
                                        dow:event.dow,
                                        area:event.area,
                                        frequency:event.frequency,
                                        type:event.type,
                                        endDate:event.endDate,
                                        startDate: event.startDate
                                    }
                                events.push(objevent); 
                        }else if(event.repeat === 1 && ( current_month > (new Date(event.start).getMonth()+1)) || current_fullYear > new Date(event.start).getFullYear() ){
                            var new_start_date = new Date(current_fullYear+'-'+current_month+'-'+new Date(event.start).getDate());
                            var new_end_date = new Date(current_fullYear+'-'+current_month+'-'+new Date(event.end).getDate());
                            var objevent={
                                    color:event.color,
                                    start:new_start_date,
                                    id:event.id,
                                    location:event.location,
                                    repeat:event.repeat,
                                    area:event.area,
                                    frequency:event.frequency,
                                    end:new_end_date,
                                    title:event.title,
                                    type:event.type,
                                    endDate:event.endDate,
                                    startDate: event.startDate
                                }
                            events.push(objevent);
                        }
                        events.push(objevent); 
                } 
            });
            callback(events);
        },
    });
var matchingDaysBetween = function (start, end, test) {
    var days = [];
    for (var day = moment(start); day.isBefore(end); day.add(30, 'd')) {
        if (test(day)) {
            days.push(moment(day));
            // push a copy of day
        }
    }
    return days;
}