0

使用Google Apps Script Calendar Service(不是Calendar API Advanced Service)是否可以创建一个按星期按月重复的重复事件?例如,该系列中的第一个事件是 3 月 21 日,星期二。我希望这个活动在每个月的第三个星期二重复。我能做到的最接近的方法如下:

var recurrence = CalendarApp.newRecurrence();
recurrence = recurrence.addMonthlyRule()
    .interval(this.repeatMonths)
    .onlyOnWeekday(CalendarApp.Weekday[dayOfWeek]);

有谁知道这样做的方法?

4

3 回答 3

1

这将创建一个在每个月的第三个星期二从上午 10 点到下午 12 点重复出现的事件。第一个事件是 2018 年 9 月 11 日,最后一个事件是 2019 年 3 月 12 日。您显然需要从数据中构建字符串参数的关键部分。

var recurringEvent = myCal.createEventFromDescription("Event Title, the third Tuesday of each Month, 10-12, 2018-09-11 until 2019-03-13");
于 2018-07-30T22:35:06.353 回答
1

这似乎是最糟糕的一种肮脏的黑客行为。必须有更好的方法来处理生成数字序列。为什么没有动态方法来获取 Weekday 对象之一?抛开恐怖片不谈,这似乎确实有效。

var start = new Date();  // The event start date
var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31];
var days = [
  CalendarApp.Weekday.SUNDAY,
  CalendarApp.Weekday.MONDAY,
  CalendarApp.Weekday.TUESDAY,
  CalendarApp.Weekday.WEDNESDAY,
  CalendarApp.Weekday.THURSDAY,
  CalendarApp.Weekday.FRIDAY,
  CalendarApp.Weekday.SATURDAY
];
var weekday = days[start.getDay()];
var monthday = start.getDate();
var mod = monthday % 7 - 1;
var good_days = numbers.slice(monthday-mod, monthday-mod+7)

var recurrence = CalendarApp.newRecurrence();
recurrence.addWeeklyRule().onlyOnWeekday(weekday).onlyOnMonthDays(good_days);

一般的想法是通过日期确定它是一个月中的哪一周。1-7 必须是第一周,8-14 必须是第二周,等等。然后创建每月重复,仅限于一周中的适当日期。最后,将一个月中的天数限制为可能导致同一周的天数。

如果addMonthlyRule()有一个标志来设置每月的重复周期,那肯定会很好。

于 2017-04-18T10:25:52.427 回答
0

我尝试过这种方式并且我工作了,希望这对那些仍然感到困惑的人有用

 Calendar calendar = GregorianCalendar.getInstance();
            calendar.set(calendar.get(Calendar.YEAR),
                    calendar.get(Calendar.MONTH),
                    calendar.get(Calendar.DAY_OF_MONTH),
                    calendar.get(Calendar.HOUR_OF_DAY),
                    calendar.get(Calendar.MINUTE),
                    calendar.get(Calendar.SECOND));



calendar.set(Calendar.DAY_OF_WEEK, calendar.get(Calendar.DAY_OF_WEEK)); // Thursday
            calendar.set(Calendar.DAY_OF_WEEK_IN_MONTH, 3); // third day of month

            alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY * (7*4) ,pendingIntent);
于 2021-04-23T06:30:42.203 回答