我目前正在尝试使用Google Apps脚本在Google日历上提取全天活动,并将一些数据导出到Google电子表格中。
注意:日历仅包含全天活动
我想要提取的数据是: - 标题 - 开始日期 - 结束日期
我在我的应用脚本中使用以下内容:
var mycal = "[Calendar ID/Address]";
var cal = CalendarApp.getCalendarById(mycal);
var events = cal.getEvents(new Date("May 1, 2017 00:00:00 CST"), new Date("August 31, 2017 23:59:59 CST"));
var sheet = SpreadsheetApp.getActiveSheet();
var header = [["Calendar Address", "Event Title", "Event Start", "Event End"]]
var range = sheet.getRange(1,1,1,4);
range.setValues(header);
for (var i=0;i<events.length;i++) {
var row=i+2;
var details=[[mycal,events[i].getTitle(), events[i].getStartTime(), events[i].getEndTime()]];
var range=sheet.getRange(row,1,1,4);
range.setValues(details);
不幸的是,&#34; getEndTime&#34;没有给我这个活动的最后一天,而是第二天。我确信这是设计的,但是有没有人对我如何在活动的最后一天拉入ACTUAL提出任何建议?
注意:我是一个完整的新手,如果答案很简单,请道歉!
答案 0 :(得分:0)
由于您无法从日历中获取活动的最后一天。您可以从日期中减去一天以获取日历活动的最后一天。您可以使用以下日期从您的日期减去
function sub1day(date){
if (date == null)
var dt = new Date()
else
dt = date
Logger.log("Current date: "+ dt)
//Method 1
var prevDay = new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()-1,dt.getHours(),dt.getMinutes(),dt.getSeconds())
Logger.log(" Method 1, previous day: "+ prevDay)
//Method 2
var time = dt.getTime() // in ms
var oneDay = 24*60*60*1000 //1 day in ms
prevDay = new Date(time - oneDay)
Logger.log("Method 2, previous day: "+ prevDay)
return prevDay
}
方法1,使用Date构造函数从当前dt obejct的各个组件构造新日期。前一天是通过从日期对象的getDate()
函数返回的Date中减去一个
方法2,获取当前日期作为时间并以毫秒(ms)减去一天。并从减去的时间创建新的日期。
您可以在Date object here
上找到更多文档答案 1 :(得分:0)
全天活动的结束时间是结束后的午夜,因此您只需要减去一分钟即可。执行以下操作,通过使用setMinute,事件结束时间现在为23:59。 (有关set date methods here的更多信息)
(如果您以后要使用它来检查当前正在运行哪些事件,而又不想减去24小时,则很有用。)
// add the following:
var eventEndTime = []; // new variable introduced which will give the intended end time.
eventEndTime[i] = events[i].getEndTime(); // sets eventEndTime to the normal event end time.
if (events[i].isAllDayEvent()) {
eventEndTime[i].setMinutes(eventEndTime[i].getMinutes() - 1); // if it is an all day event it redefines eventEndTime by subtracting 1 minute.
}
// then use this new variable instead of `events[i].getEndTime()` in `details`
var details=[[mycal,events[i].getTitle(), events[i].getStartTime(), eventEndTime[i]]]; // use the new variable instead of events[i].getEndTime()
(我也是新手,所以让我知道我是否可以在这里的代码中做得更好,等等...)