使用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]);
有谁知道这样做的方法?
答案 0 :(得分:1)
这似乎是最糟糕的一种肮脏的黑客。必须有更好的方法来处理生成数字序列。为什么没有动态的方法来获得其中一个工作日对象?除了恐怖表明,这似乎也有效。
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必须是第一周,2-8秒等。然后创建每月复发,限于适当的一周。最后,将月份的天数限制为可能导致同一周的月份。
如果addMonthlyRule()有一个标志可以按月计算重复,那肯定会很好。
答案 1 :(得分:1)
这将创建一个事件,该事件发生在每个月的第三个星期二,上午10点至下午12点。第一个事件发生在2018年9月11日,最后一个事件发生在2019年3月12日。显然,您需要根据数据构建string参数的关键部分。
var recurringEvent = myCal.createEventFromDescription("Event Title, the third Tuesday of each Month, 10-12, 2018-09-11 until 2019-03-13");
答案 2 :(得分: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);