使用fullCalendar将allDay设置为false时,如何动态设置事件的开始和结束时间?

时间:2018-09-13 09:10:48

标签: javascript fullcalendar

我正在使用全日历应用程序,在单击事件时,它将打开一个包含事件信息的模式。在这种模式下,也可以更改事件数据,考虑一下event.start,event.end和event.allDay。

单击allDay复选框后,该事件将自动更新以表示新状态,但是,如果该事件以前是nonallall事件。事件数据包含两个额外的属性:oldStart和oldEnd。当event.allDay设置为false时,我想使用这两个属性。然后应将event.start设置为oldStart,将event.end设置为oldEnd。

问题在于,使用此方法时,将event.allDay设置为false后更新事件的开始和结束时间时,更新后的事件将从日历视图中消失,并在后端进行更新以表示开始时间为00:00,结束时间为事件开始+ defaultEventDuration(在我的情况下为02:00:00)。

我的代码如下:

function changeAllDay(id) { // Function to change allDay property of event that was clicked on

    // Find corresponding event
    var event = findEvent(id);

    event.allDay = !event.allDay; // Change allDay value

    // Set start and end time to midnight if event is allDay
    if (event.allDay) {

        event.oldStart = event.start;
        event.oldEnd = event.end;

        event.start.set('hours', 00);
        event.start.set('minutes', 00);
        event.end.set('hours', 00);
        event.end.set('minutes', 00);

    } else {

        event.start = event.oldStart;
        event.end = event.oldEnd;
    };

    updateEvent(event);
}

updateEvent()函数执行API调用以在后端更新事件,并在成功后将事件更新为

$('#calendar').fullCalendar('updateEvent', event);

有人可以告诉我我在这里想念什么吗?

1 个答案:

答案 0 :(得分:1)

存储日期时,请复制它们的日期。您随后拨打set,这将耗尽您的原始时间。

    event.oldStart = event.start.clone();
    event.oldEnd = event.end.clone();

从allDay切换回时,您的活动没有持续时间。