Можете ли вы создать событие календаря для будущей даты в определенное время с помощью Google Script?

Я хочу создать событие календаря на основе того, когда письма приходят в мой почтовый ящик. Я хотел бы, чтобы это произошло через 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 ответа


Вот функция, которую я использую для создания событий, когда я просто хочу уведомить себя через 6 часов, и я использую довольно загадочную технику ввода, которая описывается атрибутом-заполнителем html текстового EventTitle/hours/min/ Я разделяю строку ввода на / если длина равна 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 лет.

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

введите описание изображения здесь


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

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

  • Реализуйте оператор 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;
    }
  }
}

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

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


Есть идеи?

10000