Можете ли вы создать событие календаря для будущей даты в определенное время c с помощью Google Script? - PullRequest
0 голосов
/ 10 февраля 2020

Я хочу создать событие календаря в зависимости от того, когда письма приходят в мой почтовый ящик. Я хотел бы, чтобы это произошло через 14 дней после получения электронного письма, а именно в 9 утра. Прямо сейчас я пытаюсь запустить скрипт на следующий день в 9 утра, а затем создать событие через 13 дней после этого времени выполнения. Есть ли более эффективный способ сделать это в самом скрипте?

//This script runs the next day around 9am, calendar invite will be created for 13 days form then 
    to account for the next day
var now = new Date().getTime();
var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
for (i in threads) {
  cals[0].createEvent(reminderLabel + '- '+ i.getFirstMessageSubject(),
    new Date(now+(MILLIS_PER_DAY*13)),
      new Date(now+(MILLIS_PER_DAY*13)+900000), {description: i.getPermalink()});
}

Ответы [ 3 ]

0 голосов
/ 11 февраля 2020

Вы можете запускать функцию автоматически ежедневно при управляемом по времени триггере

Содержание функции должно быть следующим

  • Реализация if оператор для отображения только тех сообщений, которые поступили за последние 24 часа
  • Создание объекта даты, который имеет время 9:00 сегодняшнего дня
  • Для всех новых сообщений создайте событие за 13 дней с 9:00 утра сегодня

Пример (привязать к нему устанавливаемый управляемый по времени триггер):

function myFunction() {
  var threads = GmailApp.getInboxThreads();
  var cals = CalendarApp.getAllCalendars();
  var now = new Date().getTime();
  var nineAm = new Date();
  nineAm.setHours(09);
  nineAm.setMinutes(00);
  nineAm = nineAm.getTime();
  var reminderLabel = "Reminder: ";
  var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
  for (var i =0; i <threads.length; i++) {
    if(threads[i].getLastMessageDate().getTime()>=(now-24*3600*1000)){
      Logger.log(threads[i].getLastMessageDate());
      cals[0].createEvent(reminderLabel + '- '+ threads[i].getFirstMessageSubject(),
        new Date(nineAm+(MILLIS_PER_DAY*13)),
          new Date(nineAm+(MILLIS_PER_DAY*13)+900000), {description: threads[i].getPermalink()});
    }else{
      return;
    }
  }
}
0 голосов
/ 12 февраля 2020

Вы можете попробовать это:

var event = CalendarApp.createEventFromDescription('Remind for email in 14 days at 9 am');
event.setTime(event.getEndTime(), event.getEndTime()); // fix Calendar bug with start date

Документация: createEventFromDescription(description).

0 голосов
/ 11 февраля 2020

Вот функция, которую я использую для создания событий, когда я просто хочу уведомить себя через 6 часов, и я использую довольно криптную c метод ввода, который описывается атрибутом html placeholder для текстового поля EventTitle/hours/min/ I split входная строка в /, если длина равна 3 или меньше, тогда я автоматически создаю 30,15,0-минутное уведомление, но я только что создал событие через две недели с сегодняшнего дня и получил уведомление, которое произойдет завтра с использованием этой входной строки TwoWeeksFromToday/336/0/18720 , Вот код

function createEventWithReminders(eA) {
  var minute=60*1000;
  var hour=60*minute;
  var cal=CalendarApp.getCalendarById(getGlobal('DailyEventsId'));
  var now=new Date();
  var startValue=now.valueOf() + (Number(eA[1]) * hour ) + (Number(eA[2]) * minute);
  var start=new Date(startValue);
  var endValue=start.valueOf() + (10 * minute);  
  var end=new Date(endValue);
  var event=cal.createEvent(eA[0], start, end);
  if(eA.length>3) {
    for(var i=3;i<eA.length;i++) {
      event.addEmailReminder(eA[i]);
    }
  }
  else{
    event.addEmailReminder(0);
    event.addEmailReminder(15);
    event.addEmailReminder(30);
  }
  return true;
}

Я использую его таким образом около 3 лет.

Изображение события календаря:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...