【问题标题】:Create an all-day event every month without weekends每月创建一个全天活动,没有周末
【发布时间】:2021-07-02 10:01:49
【问题描述】:

我正在尝试让 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);

任何帮助将不胜感激。

【问题讨论】:

  • So far, this is the closest I managed to get 这是做什么的?

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


【解决方案1】:
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();
}

【讨论】:

  • 谢谢,太好了。虽然,我自己编码非常糟糕(除非我用 SO 的代码拼凑一个项目)。所以,我不太确定如何让这个触发器在你指定的日子里真正创建一个事件来运行它……所以你能不能用 1-2 行更新它,这会让我变得更平?
  • 只需将您的函数命名为 createMyEvent 或将 createMyEvent 替换为您的函数名称。
猜你喜欢
  • 2020-03-30
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多