这似乎是最糟糕的一种肮脏的黑客行为。必须有更好的方法来处理生成数字序列。为什么没有动态方法来获取 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()有一个标志来设置每月的重复周期,那肯定会很好。