【问题标题】:Fullcalendar: display multi days event in allDay event?Fullcalendar:在 allDay 事件中显示多天事件?
【发布时间】:2017-11-27 09:45:11
【问题描述】:

我正在使用全日历版本 3.6.2 处理一些事件。

$('#calendar').fullCalendar({
            header: {
                left: 'prev,next today',
                center: 'title',
                right: 'month,agendaWeek,agendaDay,listWeek'
            },
            editable: true,
            eventLimit: true, // allow "more" link when too many events
            navLinks: true,
            nextDayThreshold: '00:00:00', // 9am
            events: [
               {
                    title: 'Tesst tesst',
                    allDay: false,
                    start: '2017-11-12T08:00:00',
        end: '2017-11-13T15:00:00'
                },
                {
        title: 'Birthday Party',
        start: '2017-11-19T10:00:00',
        end: '2017-11-21T06:00:00'
    },
                {
                    title: 'All Day Event',
                    allDay:true,
                    start: TOMORROW,
                    end: TOMORROW
                },
                {
                    title: 'Long Event',
                        start: '2017-11-07T10:00:00',
        end: '2017-11-10T06:00:00'
                },
                {
                    title: 'Conference',
                        start: '2017-11-26T10:00:00',
        end: '2017-11-28T04:00:00'
                },
                {
                    title: 'Meeting',
                    allDay: true,
                    start: TODAY + 'T10:30:00',
                    end: TODAY + 'T12:30:00'
                },
            ]
        });

我的笨蛋:demo

我想像 Allday 事件一样在议程周/agendaDay 的全天事件中显示长事件。

有什么办法吗?

非常感谢!

【问题讨论】:

  • 对这个问题有点困惑,您希望跨多天的事件显示在全天标签中吗?对于演示中的那些事件,将属性“allDay”设置为 true。
  • @jones,如果我设置 'allDay': true,长事件显示错误,例如:如果我设置 allDay,'Long Event' 将从 2017-11-07 到 2017-11-09 显示:是的,而不是从 2017-11-07 到 2017-11-10
  • 根据文档,这不是“错误”:fullcalendar.io/docs/event_data/Event_Object 表示“结束”属性:“事件结束的专有日期/时间......它是事件刚结束后的时刻。例如,如果事件的最后一整天是星期四,则该事件的唯一结束时间将是 星期五的 00:00:00!”换句话说,代码的行为与该情况下记录的完全一样。
  • 我知道。但是在我的项目中,我的客户希望 4 天的活动在 4 天内显示,而在议程周/议程日中,这个活动必须显示在全天选项卡上。
  • 当然很明显:在您的数据中使其提前 24 小时结束。然后它应该会根据需要显示。

标签: javascript events fullcalendar


【解决方案1】:

遇到类似问题,试试这个:

eventDataTransform 是这里的关键,它允许您在数据呈现到日历之前对其进行操作。

在我的示例中,因为在我们的日历上创建事件的其他人经常创建多天事件,然后占据agendaDay 视图中的大部分屏幕,所以我选择将这些事件重新分类为全天事件,将它们重新定位到视图的顶部。

我已选择将 >=5 小时的任何活动重新分类为全天活动。 抓住eventData.end == null 也很重要!

对于需要将结束日期重新定义为第二天早上午夜的事件,需要进一步确定多日事件。这在例如多日活动在最后一天的 1500 小时结束时很有用,这也将作为全天活动移至顶部。没有这项修正,最后一天将被切断。这里有更多信息:FullCalendar - Event spanning all day are one day too short

 $('#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);  
        },

    });

【讨论】:

  • 解释您的代码,以及它与答案中发布的代码有何不同,将大大提高此答案的质量。
  • 已根据您的 cmets 进行了修订。希望有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多