创建事件系列的问题

问题描述

我要为其创建Google日历活动系列

“每月的每个第一个星期日”

使用Calendarapp.getCalendarById(testId).createEventSeries(...)。

我尝试了Calendarapp.newRecurrence()。add ...仅...的各种组合,但是它们都不起作用。 代码

function example () {

  var year=2022;
  var testId='[email protected]';
  var oneHour=60 * 60 * 1000
  var sunday=Calendarapp.Weekday.SUNDAY;
  var silvester=new Date(year,11,31,23,59,0);
  var startDayTime=new Date(year,2,19,30,0);
  var recurrenceWeekday=Calendarapp.newRecurrence().addWeeklyRule().onlyOnWeekday(sunday)
  var newEvent = Calendarapp.getCalendarById(testId).createEventSeries("Termin",startDayTime,new Date(startDayTime.getTime() + oneHour),recurrenceWeekday.until(silvester));
}    

在每个星期日创建一个事件。我应该使用哪种方法将活动限制在每个月的第一个星期日?

在线创建这样的eventSerie没问题。

EventSerie online

正确的VCALENDAR条目如下所示:

BEGIN:VEVENT
DTSTART;TZID=Europe/Vienna:20220102T193000
DTEND;TZID=Europe/Vienna:20220102T203000
RRULE:FREQ=MONTHLY;COUNT=12;BYDAY=1SU
DTSTAMP:20200811T121708Z
UID:[email protected]
CREATED:20200811T120316Z
DESCRIPTION:
LAST-MODIFIED:20200811T121423Z
LOCATION:FranZ
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Termin_1
TRANSP:OPAQUE
END:VEVENT

解决方法

  • 您可以找到有关重复发生的Google Calendar API事件here
  • 的文档
  • Events resource的含义是:

针对重复发生的事件的RRULE,EXRULE,RDATE和EXDATE行的列表,如RFC5545中所指定。请注意,此字段中不允许使用DTSTART和DTEND行。事件的开始和结束时间在开始和结束字段中指定。对于单个事件或重复发生的事件,将忽略此字段。

  • 其中有关于RFC5545
  • 的详细文档

对于您的特定查询,递归规则为:

"RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=SU;BYSETPOS=1"

  • CalendarApp不支持这种语法

此后,您可以按以下方式使用“高级日历”:

function example() {
  var testId='XXXXXXXXXXXXXXXXXXXXXX';
  var silvester="20221231";
  var resource = {
    "start": {
      "date": "2020-09-06"
    },"end": {
      "date": "2020-09-06"
    },"recurrence": [
      "RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=SU;BYSETPOS=1;UNTIL=" + silvester
    ],"summary": "Termin"
  }
  Calendar.Events.insert(resource,testId);
}