如何修改事件系列的特定实例
How to modify a specific instance of an event series
假设我创建了一个从星期一上午 9 点开始到上午 11 点结束的周期性事件,此事件每天重复 3 天。
现在我想(在我使用重复创建事件之后)在星期二更改事件的开始时间,同时保持其他事件不变,我该怎么做?
我可以使用高级日历 API 轻松获得此 eventSeries 的重复规则,它 returns 类似于
RRULE:FREQ=DAILY;COUNT=3
可以随意修改此规则以更改所有事件(我也可以使用 patch
更新事件,但不只是针对单个事件。
我尝试了 API tryout 来获取此 eventSeries 的每个实例,我确实可以看到每个开始和结束时间(*见下文)但我没有找到任何方法来使用日历 API Google 应用程序脚本。
我没有找到修改特定实例的方法,即写回修改后的值。
因为我可以在日历 Web 中手动执行此操作 UI 我想我应该可以使用脚本来执行此操作,但我真的不知道如何操作。
我用来获取事件参数的代码相当简单:
...
for(var n = 1 ; n < data.length ; n++){
if(data[n][9] == ''){continue};
var advancedID = data[n][9].substring(0,data[n][9].indexOf('@'));
Logger.log(advancedID+'\n');
ChangeEventRecurrence(calID,advancedID);
}
}
function ChangeEventRecurrence(calID,advancedID){
var event = Calendar.Events.get(calID, advancedID);
Logger.log(event.recurrence+'\n'+JSON.stringify(event));
// here I should be able to get all the instances of this eventSeries and change them if needed
}
这是我使用 API 试用版获得的一个实例的捕获:
使用 CalendarApp
,只需指定日期范围即可查找单个事件并循环遍历结果,然后使用 .setTime()
:
var cal = CalendarApp.getCalendarsByName('<YOUR_CAL>')[0];
var events = cal.getEvents(new Date("April 5, 2016 08:00:00 AM"), new Date("April 5, 2016 11:30:00 AM"));
events.forEach( function(e) {
//var e = events[0];
//if ( e.getTitle() === 'Your Title' )
e.setTime(new Date("April 5, 2016 11:00:00 AM"), new Date("April 5, 2016 01:00:00 PM"));
});
我无法判断您的 "specific instance" 是仅表示单个事件还是每个星期二的事件,或者您是否有理由在这种情况下使用高级日历 API。
假设我创建了一个从星期一上午 9 点开始到上午 11 点结束的周期性事件,此事件每天重复 3 天。 现在我想(在我使用重复创建事件之后)在星期二更改事件的开始时间,同时保持其他事件不变,我该怎么做?
我可以使用高级日历 API 轻松获得此 eventSeries 的重复规则,它 returns 类似于
RRULE:FREQ=DAILY;COUNT=3
可以随意修改此规则以更改所有事件(我也可以使用 patch
更新事件,但不只是针对单个事件。
我尝试了 API tryout 来获取此 eventSeries 的每个实例,我确实可以看到每个开始和结束时间(*见下文)但我没有找到任何方法来使用日历 API Google 应用程序脚本。
我没有找到修改特定实例的方法,即写回修改后的值。
因为我可以在日历 Web 中手动执行此操作 UI 我想我应该可以使用脚本来执行此操作,但我真的不知道如何操作。
我用来获取事件参数的代码相当简单:
...
for(var n = 1 ; n < data.length ; n++){
if(data[n][9] == ''){continue};
var advancedID = data[n][9].substring(0,data[n][9].indexOf('@'));
Logger.log(advancedID+'\n');
ChangeEventRecurrence(calID,advancedID);
}
}
function ChangeEventRecurrence(calID,advancedID){
var event = Calendar.Events.get(calID, advancedID);
Logger.log(event.recurrence+'\n'+JSON.stringify(event));
// here I should be able to get all the instances of this eventSeries and change them if needed
}
这是我使用 API 试用版获得的一个实例的捕获:
使用 CalendarApp
,只需指定日期范围即可查找单个事件并循环遍历结果,然后使用 .setTime()
:
var cal = CalendarApp.getCalendarsByName('<YOUR_CAL>')[0];
var events = cal.getEvents(new Date("April 5, 2016 08:00:00 AM"), new Date("April 5, 2016 11:30:00 AM"));
events.forEach( function(e) {
//var e = events[0];
//if ( e.getTitle() === 'Your Title' )
e.setTime(new Date("April 5, 2016 11:00:00 AM"), new Date("April 5, 2016 01:00:00 PM"));
});
我无法判断您的 "specific instance" 是仅表示单个事件还是每个星期二的事件,或者您是否有理由在这种情况下使用高级日历 API。