FullCalendar将长时间活动重新定义为全天活动

时间:2018-07-22 23:44:22

标签: fullcalendar

我正在使用FullCalendar和iCalendar2FullCalendar从各种iCloud帐户中输入.ICS文件。这样可以很好地呈现我们共享日历中的所有事件。

我正在做一个小型显示器,并且正在使用“ agendaDay”视图。我喜欢全天活动都排在最前面,并且可以在下面看到任何安排冲突。

但是,我有一些活动会持续数天,例如从星期五的1700hrs到星期日的1900hrs,我的女儿将和我在一起。在议程议程视图上,这将在每个小时的整个星期六中显示为实线,我想知道是否可以将某个持续时间内的事件呈现为全天活动?

我玩过eventRender回调,但是虽然可以更改事件属性,但事件仍然呈现,就像从未进行过更改一样。

这是我的代码,在此修订版中,我应用了一个固定的日期,希望它可以作为一个全天活动绘制,但是没有运气!:

        $('#calendar').fullCalendar({
          header: {
                left: 'prev,next today',
                center: '',
                right: 'month,agendaWeek,agendaDay'
            },
          defaultView: 'month',
          editable: false,
          aspectRatio: 0.77,


            eventRender: function(event, element, view) { 

                var dur = event.end - event.start; //event duration
                var days = dur / 86400000;

                if(days > 1 || event.end == null){ // needs altering to show as all day event.

                    console.log('long event - all day?' + event.allDay);
                    event.allDay = true;
                    console.log(event.title + ' - all day?' + event.allDay);            

                            console.log(event.title + ' - starts:' + EpochToDate(event.start));         
                            console.log(event.title + ' - ends:' + EpochToDate(event.end)); 

                     event.start = '2018-07-23T10:00:00';   
                     event.end = '2018-07-24T10:00:00';
                     console.log (event);
                 }
             }    
            });
        })

1 个答案:

答案 0 :(得分:1)

感谢@ADyson,这是我最后使用的内容。

 $('#calendar').fullCalendar({
          header: {
                left: 'prev,next today',
                center: '',
                right: 'month,agendaWeek,agendaDay'
            },
          defaultView: 'month',
          editable: false,
          aspectRatio: 0.77,
        eventDataTransform: function (eventData) {

                var dur = eventData.end - eventData.start; //total event duration

                if(dur >= 18000000 || eventData.end == null){ // 5 hours

                        eventData.allDay = true;


                        //eventData.end needs ammending to 00:00:00 of the next morning
                        if (dur > 86400000) {


                        var m = moment(eventData.end);
                        var roundDown = m.startOf('day');
                        var day2 = moment(roundDown).add(1, 'days')

                        eventData.end = day2.toString();

                        }

                }

            return(eventData);  
        },

    });