首页 > 解决方案 > 每月创建一个全天活动,没有周末

问题描述

我正在尝试让 Google Apps 脚本在每个月的 10 日创建一个名为“发薪日”的活动,但如果 10 日是周六或周日,则必须在 10 日(星期五)之前的最后一个工作日创建该活动。

到目前为止,这是我设法得到的最接近的:

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

任何帮助将不胜感激。

标签: google-apps-scriptcalendargoogle-calendar-api

解决方案


function createNextMonthsTrigger() {
  let d = 10;
  const nmd = new Date(new Date().getFullYear(), new Date().getMonth() + 1, d).getDay();
  if (nmd == 6) {
    d = 9;
  } else if (nmd == 0) {
    d = 8;
  }
  ScriptApp.getProjectTriggers().forEach(t => {
    if (t.getHandlerFunction() == 'createMyEvent') {
      ScriptApp.deleteTrigger(t);
    }
  });
  ScriptApp.newTrigger('createMyEvent').timeBased().onMonthDay(d).atHour(1).create();
}

推荐阅读