Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 事件的结束日期不正确_Google Apps Script_Google Sheets_Google Calendar Api - Fatal编程技术网

Google apps script 事件的结束日期不正确

Google apps script 事件的结束日期不正确,google-apps-script,google-sheets,google-calendar-api,Google Apps Script,Google Sheets,Google Calendar Api,我在我的google工作表中实现了一个脚本,它获取gcal日历信息并将其显示在工作表的各个选项卡中。但是,工作表中显示的每个事件的结束日期比日历本身中显示的时间长一天。代码如下。通过日志记录,我不明白为什么会发生这种情况。是否与日期的格式有关?任何帮助都将不胜感激 function populateAllTabs() { var id = "[MY CAL ID HERE]"; // id is currently set to bookings calendar. NB: Takes

我在我的google工作表中实现了一个脚本,它获取gcal日历信息并将其显示在工作表的各个选项卡中。但是,工作表中显示的每个事件的结束日期比日历本身中显示的时间长一天。代码如下。通过日志记录,我不明白为什么会发生这种情况。是否与日期的格式有关?任何帮助都将不胜感激


function populateAllTabs() {
  var id = "[MY CAL ID HERE]";   // id is currently set to bookings calendar. NB: Takes a string!
  var cal = CalendarApp.getCalendarById(id);
  var startPeriod = new Date('January 1, 2020');
  startPeriod.setHours(0, 0, 0, 0);
  var endPeriod = new Date(startPeriod);
  endPeriod.setDate(endPeriod.getDate() + 365); // looks for all events in the range one year
  var ss = SpreadsheetApp.getActive();
  for(var n in ss.getSheets()){// loop over all tabs in the spreadsheet
    var sheet = ss.getSheets()[n];// look at every sheet in spreadsheet
    var name = sheet.getName();//get name

    if(name != 'List'){ 

        var gig = sheet.getRange(1,1);
        var gigName = gig.getValue();
        var events = cal.getEvents(startPeriod, endPeriod, {search:gigName});


        // find the title of each event in the calendar
        var eventTitles = [];
         for (var i = 0; i < events.length; i++) { 
           eventTitles.push([events[i].getTitle()]);    
         }

        // find the start date of each event in the calendar
       var starttime = [];
         for (var i = 0; i < events.length; i++) { 
           starttime.push([Utilities.formatDate(events[i].getStartTime(), "GMT", "MM/dd/yy")]);    
         }

        // find the end date of each event in the calendar
       var endtime = [];
         for (var i = 0; i < events.length; i++) { 
           endtime.push([Utilities.formatDate(events[i].getEndTime(), "GMT", "MM/dd/yy")]);    
         }

       var cell = sheet.getRange("B3");

       cell.setValue(starttime + ' - ' + endtime);
    }
  }
}

函数populateAllTabs(){
var id=“[MY CAL id HERE]”;//id当前设置为bookings calendar。注意:需要一个字符串!
var cal=CalendarApp.getCalendarById(id);
var startPeriod=新日期(“2020年1月1日”);
开始周期设置小时数(0,0,0,0);
var endPeriod=新日期(开始期间);
endPeriod.setDate(endPeriod.getDate()+365);//查找一年范围内的所有事件
var ss=SpreadsheetApp.getActive();
for(ss.getSheets()中的var n){//在电子表格中的所有选项卡上循环
var sheet=ss.getSheets()[n];//查看电子表格中的每个工作表
var name=sheet.getName();//获取名称
如果(名称!=“列表”){
var gig=表getRange(1,1);
var gigName=gig.getValue();
var events=cal.getEvents(startPeriod,endPeriod,{search:gigName});
//在日历中查找每个事件的标题
var-eventTitles=[];
对于(var i=0;i
这对我很有用。日期没问题

function populateAllTabs() {
  var cal = CalendarApp.getCalendarById('id');
  var startyear=2019;
  var startPeriod = new Date(startyear,0,1);
  var endPeriod = new Date(startyear+1,1,1);
  var ss=SpreadsheetApp.getActive();
  var shts=ss.getSheets();
  for(var n=0;n<shts.length;n++){
    var sheet=shts[n];
    var name=sheet.getName();
    if(name!='List'){ 
      var gigName = sheet.getRange(1,1).getValue();
      var ev=cal.getEvents(startPeriod, endPeriod, {search:gigName});
      var gigs=[]
      for (var i=0;i< ev.length;i++) { 
        gigs.push([ev[i].getTitle(),Utilities.formatDate(new Date(ev[i].getStartTime()),Session.getScriptTimeZone(),"MM/dd/yy"),Utilities.formatDate(new Date(ev[i].getEndTime()),Session.getScriptTimeZone(),"MM/dd/yy")]);    
      }
      if(gigs) {
        sheet.getRange(3,2,gigs.length,gigs[0].length).setValues(gigs);
      }
    }
  }
}
函数populateAllTabs(){
var cal=CalendarApp.getCalendarById('id');
var startyear=2019;
var startPeriod=新日期(startyear,0,1);
var endPeriod=新日期(开始日期+1,1,1);
var ss=SpreadsheetApp.getActive();
var shts=ss.getSheets();

对于(var n=0;ngetEndTime()和getStartTime()是Google日历方法:我也尝试了getAll DayEndDate(),因为它们是全天事件,但仍然没有解决问题。您的电子表格时区如何?您可以在File->spreadsheet SettingsHanks下验证它,但这似乎无法解决问题。使用getTimeZone()在做一些日志记录时,开始时间和结束时间都是中心标准时间。这就是它们应该是的时间。但是,日历中的事件在1月20日结束,在我的电子表格中显示为1月21日,我试图显示的所有其他事件也是如此!电子表格的时区是什么?脚本和电子表格有单独的timezone设置。我设置了一个测试并修改了一点代码,我可以确认它对我有效。伙计,好的,我解决了它。与代码完全无关。工作表中的第一个选项卡是索引,我的同事让该索引填充了我一直试图操作的选项卡。:/谢谢你的帮助!我添加该测试是为了检查是否有gigs b在尝试写工作表之前,我没有领会到这一点,因为在我的示例中,我设置了在每张工作表中总能找到一些东西。