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