我正在尝试获得一个重复发生事件的统一实例,并对其进行更改以反映该重复事件的所有实例。

calendar.getEvents为循环序列中的每个事件返回单个实例。即如果我对该实例进行了任何更改(例如删除它),则仅删除该特定实例。我尝试使用getEventSeries()deleteEventSeries(),但是它们未反映在数组中,因此每次删除时,我最终都会调用getEvents。这是最好的方法吗?还是有其他选择?

//The object of the following code is to delete all events in a calendar
function delete_events(calendar) {
  var fromDate = new Date("January 1, 1900 00:00:00");
  var toDate = new Date("January 1, 2100 00:00:00");
  var events = calendar.getEvents(fromDate, toDate);

  while (events.length > 0) {
    var ev = events[0];
    var es = ev.getEventSeries();
    es.deleteEventSeries();
    Logger.log('Deleted: ' + es.getTitle());

    events = calendar.getEvents(fromDate, toDate);
  }
}

最佳答案

由于eventsSeries具有相同的ID,因此您可以通过简单地记住这些ID并在随后的迭代中跳过这些事件来简化此过程。

这是一个简单的测试代码:

function test(){
  var cal = CalendarApp.getCalendarsByName('some calendar name you own')[0];
  delete_events(cal);
}

function delete_events(cal) {
  var fromDate = new Date("January 1, 2014 00:00:00");
  var toDate = new Date("January 1, 2100 00:00:00");
  var events = cal.getEvents(fromDate, toDate);
  var IDs = [];
  for(var n in events){
    Logger.log(events[n].getTitle());
    var id = events[n].getId();
    if(IDs.indexOf(id)>-1){continue};
    try{
      cal.getEventSeriesById(id).deleteEventSeries();
      IDs.push(id);
      Logger.log(events[n].getTitle()+' was deleted,  ID = '+events[n].getId());
    }catch(err){Logger.log(events[n].getTitle()+' on '+Utilities.formatDate(events[n].getStartTime(),cal.getTimeZone(),'yyyy/MMM/dd')+" was not deleted,you don't have the right to modify it");}
  }
}

关于javascript - 获取重复事件和非重复事件的单个统一实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26081968/

10-11 22:14
查看更多