Google apps script 谷歌日历到谷歌工作表,脚本没有正确拾取时间

Google apps script 谷歌日历到谷歌工作表,脚本没有正确拾取时间,google-apps-script,google-sheets,google-calendar-api,Google Apps Script,Google Sheets,Google Calendar Api,出于某种原因,我运行的脚本将事件拖到每小时一次。如果我有一个下午4点的时间,它会显示为下午3点。事件日期和时间显示为CST,但显示不正确。这一行是否需要改成当地时间 我不知道该试什么。现在使用CST提取日期/时间,但是脚本行的输出带来了错误的时间。有什么不同的东西需要我补充吗 var events = cal.getEvents(new Date("October 20, 2019 00:00:00 CST"), new Date("November 2, 2019 23:59:59 CST")

出于某种原因,我运行的脚本将事件拖到每小时一次。如果我有一个下午4点的时间,它会显示为下午3点。事件日期和时间显示为CST,但显示不正确。这一行是否需要改成当地时间

我不知道该试什么。现在使用CST提取日期/时间,但是脚本行的输出带来了错误的时间。有什么不同的东西需要我补充吗

var events = cal.getEvents(new Date("October 20, 2019 00:00:00 CST"), new Date("November 2, 2019 23:59:59 CST"), {search: ''});


var sheet = SpreadsheetApp.getActiveSheet();
// Uncomment this next line if you want to always clear the spreadsheet content before running - Note people could have added extra columns on the data though that would be lost
// sheet.clearContents();  

// Create a header record on the current spreadsheet in cells A1:N1 - Match the number of entries in the "header=" to the last parameter
// of the getRange entry below
sheet.clearContents();
var header = [["EVENT / SHOW", "VENUE / LOCATION", "DELIVERY NOTES", "DATE", "TIME"]]
var range = sheet.getRange(1,1,1,5);
range.setValues(header);


// Loop through all calendar events found and write them out starting on calulated ROW 2 (i+2)
for (var i=0;i<events.length;i++) {
var row=i+2;
var myformula_placeholder = '';
// Matching the "header=" entry above, this is the detailed row entry "details=", and must match the number of entries of the GetRange entry below
// NOTE: I've had problems with the getVisibility for some older events not having a value, so I've had do add in some NULL text to make sure it does not error
var details=[[events[i].getTitle(), events[i].getLocation(), events[i].getDescription(), events[i].getStartTime(), Utilities.formatDate(events[i].getStartTime(), Session.getScriptTimeZone(), "hh:mma")]];
var range=sheet.getRange(row,1,1,5);
range.setValues(details);
var events=cal.getEvents(新日期(“2019年10月20日00:00:00 CST”)、新日期(“2019年11月2日23:59:59 CST”)、{搜索:'};
var sheet=SpreadsheetApp.getActiveSheet();
//如果您希望在运行之前始终清除电子表格内容,请取消对下一行的注释-注意,人们可能会在数据上添加额外的列,但这将丢失
//sheet.clearContents();
//在单元格A1:N1中的当前电子表格上创建标题记录-将“header=”中的条目数与最后一个参数匹配
//下面的getRange条目的
sheet.clearContents();
var标题=[[“活动/演出”、“地点/地点”、“送货单”、“日期”、“时间”]]
var范围=sheet.getRange(1,1,1,5);
范围。设置值(标题);
//循环查看找到的所有日历事件,并从计算的第2行(i+2)开始写出它们

对于(var i=0;i,仅供参考,这是我用来测试格式字符串的代码

function runTwo() {
  var ss=SpreadsheetApp.getActive();
  var calA=CalendarApp.getAllCalendars();
  var html='';
  var today=new Date();
  var s=new Date(today.getFullYear(),today.getMonth(),today.getDate());
  var e=new Date(today.getFullYear(),today.getMonth(),today.getDate()+15);
  calA.forEach(function(c){
    var events=c.getEvents(s,e);  
    if(events.length>0) {
      html+=Utilities.formatString('<br />%s<br />',c.getName());
    }
    html+='<style>th,td{border:1px solid black;}</style><table>';
    if(events.length>0) {
      html+=Utilities.formatString('<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th>',"EVENT/SHOW","VENUE/LOCATION","DELIVERY NOTES","DATE","TIME");
    }
    events.forEach(function(ev){
      var sd=Utilities.formatDate(new Date(ev.getStartTime()),Session.getScriptTimeZone(),"E MM dd, yyyy");
      var st=Utilities.formatDate(new Date(ev.getStartTime()),Session.getScriptTimeZone(),"hh:mma");
      html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>',ev.getTitle(),ev.getLocation(),ev.getDescription(),sd,st);
    });
    html+='</table>';
  });
  if(html) {
    var userInterface=HtmlService.createHtmlOutput(html).setWidth(1000);
    SpreadsheetApp.getUi().showModelessDialog(userInterface, "My Event Data");
  }else{
    SpreadsheetApp.getUi().alert('No Events Found');
  }
}
函数runTwo(){
var ss=SpreadsheetApp.getActive();
var calA=CalendarApp.getAllCalendars();
var html='';
var today=新日期();
var s=新日期(今天.getFullYear(),今天.getMonth(),今天.getDate());
var e=新日期(今天.getFullYear(),今天.getMonth(),今天.getDate()+15);
calA.forEach(功能(c){
var事件=c.getEvents(s,e);
如果(事件长度>0){
html+=Utilities.formatString('
%s
',c.getName()); } html+='th,td{边框:1px纯黑色;}'; 如果(事件长度>0){ html+=实用程序.formatString(“%s%s%s%s%s”、“活动/演出”、“地点/地点”、“送货单”、“日期”、“时间”); } 事件。forEach(函数(ev){ var sd=Utilities.formatDate(新日期(ev.getStartTime()),Session.getScriptTimeZone(),“E MM dd,yyyy”); var st=Utilities.formatDate(新日期(ev.getStartTime()),Session.getScriptTimeZone(),“hh:mma”); html+=Utilities.formatString(“%s%s%s%s%s”,ev.getTitle(),ev.getLocation(),ev.getDescription(),sd,st); }); html+=''; }); 如果(html){ var userInterface=HtmlService.createHtmlOutput(html).setWidth(1000); SpreadsheetApp.getUi().showModelessDialog(用户界面,“我的事件数据”); }否则{ SpreadsheetApp.getUi().alert('未找到任何事件'); } }

它将每个日历的所有事件数据加载到一个单独的小html表中,并在一个无模式对话框中显示所有事件数据。

可能Google脚本和您的日历有不同的时区。我验证了两者,它们都是CST。但是,Session.getScriptTimeZone(),“hh:mma”可能需要更多的定义。我不确定,因为这对我来说是全新的。@Tanaike你能帮我吗?有什么想法吗?我能看更多的代码吗?基本上,我们需要一个。这样我们就可以验证问题,然后试着修复它。我运行了这段代码
Utilities.formatDate(events[j].getStartTime(),Session.getScriptTimeZone(),“hh:mma”)
在我的一个脚本中,我已经使用了大约3年,它工作得很好。我唯一需要更改的是索引参数。我不确定我是否理解正确。这是否意味着它工作或不工作?是的,它对我工作。但它与您正在做的工作没有任何不同。因此,我问了问题tion您从何处找到脚本设置的时区?我脚本的第一行显示了从CST中提取信息的日期。我认为如果列出它,它将从该时区提取信息。在事件区域中有一行:Session.getScriptTimeZone(),“hh:mma“可能需要修改以指定时区?请转到“文件/脚本属性”以查看脚本时区。我猜它与日历设置不同