如何使用GScript筛选谷歌日历系列约会,仅显示系列母事件?
问题原因
你当前的代码会返回所有系列事件实例,是因为event.isRecurringEvent()方法对母事件和系列中的每个重复实例都会返回true,所以过滤后得到的是时间范围内所有属于重复系列的事件,而不只是母事件。
解决方案
要只获取系列的母事件,需要利用CalendarEvent.getEventSeries()方法——这个方法会返回当前事件所属的系列母事件。我们可以通过收集这些母事件并去重,来避免重复输出同一个系列的母事件。
修正后的代码示例
function getRecurringMasterEvents() { var calendar = CalendarApp.getDefaultCalendar(); var now = new Date(); var oneYearFromNow = new Date(now.getFullYear() + 1, now.getMonth(), now.getDate()); var events = calendar.getEvents(now, oneYearFromNow); var masterEvents = new Set(); // 用Set自动去重 events.forEach(function(event) { if (event.isRecurringEvent()) { var masterEvent = event.getEventSeries(); masterEvents.add(masterEvent); } }); // 遍历输出母事件标题 masterEvents.forEach(function(master) { Logger.log(master.getTitle()); }); }
关键说明
getEventSeries():不管是母事件还是重复实例,调用这个方法都会返回该系列的原始母事件对象。Set:利用Set的特性自动去重,避免同一个系列的多个实例导致母事件被重复添加。- 如需获取母事件更多信息(如创建时间、重复规则),可直接调用母事件对象的方法,比如
master.getRecurrence()获取重复规则。
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

