创建一个重复的事件,在第三个星期二重复每月

时间:2017-03-21 21:07:55

标签: google-apps-script google-calendar-api recurring-events

使用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]);

有谁知道这样做的方法?

3 个答案:

答案 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);