Создайте повторяющееся событие, которое повторяется ежемесячно в третий вторник.
Используя службу календаря сценариев Google Apps (не расширенную службу API-интерфейса календаря), возможно ли создать повторяющееся событие, которое будет повторяться ежемесячно по дням недели? Например, первое событие в серии - вторник, 21 марта. Я хочу, чтобы это событие повторялось ежемесячно в третий вторник месяца. Самое близкое, что я мог сделать к выполнению этого ниже:
var recurrence = CalendarApp.newRecurrence();
recurrence = recurrence.addMonthlyRule()
.interval(this.repeatMonths)
.onlyOnWeekday(CalendarApp.Weekday[dayOfWeek]);
Кто-нибудь знает способ сделать это?
3 ответа
Это создаст событие, которое повторяется 3-го вторника каждого месяца с 10:00 до 12:00. Первое событие будет 11 сентября 2018 года, а последнее - 12 марта 2019 года. Очевидно, вам нужно будет построить ключевые части строкового параметра из ваших данных.
var recurringEvent = myCal.createEventFromDescription("Event Title, the third Tuesday of each Month, 10-12, 2018-09-11 until 2019-03-13");
Это похоже на грязный хак худшего вида. Должен быть лучший способ обработки последовательности чисел. И почему нет динамического способа получить один из объектов 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 должна быть первая неделя, 2-8 секунда и т. Д. Затем создайте ежемесячное повторение, ограниченное соответствующим днем недели. Наконец, ограничьте число дней месяца теми, которые могут привести к той же неделе месяца.
Было бы неплохо, если бы у addMonthlyRule() был флаг для установки повторения по неделям месяца.
Я пробовал этот способ, и я работал, надеюсь, это сработает для всех, кто все еще в замешательстве.
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);