Google apps script 如何在谷歌应用程序脚本中将日期和时间组合成一个元素?

Google apps script 如何在谷歌应用程序脚本中将日期和时间组合成一个元素?,google-apps-script,google-calendar-api,datetime-format,Google Apps Script,Google Calendar Api,Datetime Format,我正在尝试将日期和时间合并到google应用程序脚本数组中的一个元素中。这是用于将数据从谷歌工作表转换为谷歌日历 我的数组中有4个元素;标题、日期、开始时间、结束时间。它们中的每一个都是由google sheet中的.getValues检索到的 title1 | Aug 08,2019 | 7:30 | 8:25 title2 | Aug 10,2019 | 8:30 | 9:25 我想从google sheet中抓取日期和时间,然后在calendarApp中创建事件 //so with .g

我正在尝试将日期和时间合并到google应用程序脚本数组中的一个元素中。这是用于将数据从谷歌工作表转换为谷歌日历

我的数组中有4个元素;标题、日期、开始时间、结束时间。它们中的每一个都是由google sheet中的
.getValues
检索到的

title1 | Aug 08,2019 | 7:30 | 8:25
title2 | Aug 10,2019 | 8:30 | 9:25
我想从google sheet中抓取日期和时间,然后在calendarApp中创建事件

//so with .getValues() in cArr variable from the table above I tried this code:
for (var i = 0; i <= cArr.length; i++){
CalendarApp.getCalendarById("myCalendarID").createEvent(cArr[i][0],cArr[i][2],cArr[i][2]);
};

.createEvent
中使用这个新数组之前,您可以使用getDisplayValues()函数[1]来获取单元格的字符串值,从中获取日期信息并创建一个日期对象。以下是代码:

  var cArr = sheet.getRange(13, 3, 2, 4).getDisplayValues();

  for (var i = 0; i < cArr.length; i++){
    var month = cArr[i][1].substring(0, 3);
    var day = cArr[i][1].substring(4, 6);
    var year = cArr[i][1].substring(7);

    var startMinutes = cArr[i][2].substr(-2);
    var startHours = cArr[i][2].substring(0, 2);
    var endMinutes = cArr[i][3].substr(-2);
    var endHours = cArr[i][3].substring(0, 2);

    var startDate = new Date(month + " " + day + ", " + year + " " + startHours + ":" + startMinutes + ":00");
    var endDate = new Date(month + " " + day + ", " + year + " " + endHours + ":" + endMinutes + ":00");

    CalendarApp.getCalendarById("[mail]").createEvent(cArr[i][0], startDate, endDate);
  };
var cArr=sheet.getRange(13,3,2,4).getDisplayValues();
对于(变量i=0;i

[1] 非常感谢您的建议。 我找到了解决我问题的变通办法。我将在这里分享以供参考

从googlesheet检索到的数据被转换为date对象,因此我们的想法是使用连接创建一个包含日期、月、年、时间(小时和分钟)的新字符串,然后将该字符串应用于
new date()
函数

var day = Utilities.formatDate(cArr[1],"GMT+07:00","MMM dd");
var year = Utilities.formatDate(cArr[1],"GMT+07:00","yyyy");
var ST = Utilities.formatDate(cArr[2],"GMT+07:08","HH:mm");
var ET = Utilities.formatDate(cArr[3],"GMT+07:08","HH:mm");
//then I concatenate them together
var StartTime = new Date(day + " " + ST + " " + year);
var EndTime = new Date(day + " " + ET + " " + year);
我在cArr上的
.map()
函数下执行此操作,以获得更好的操作时间,然后在
CalendarApp.getCalendarById(“myCalendarID”).createEvent()中使用for循环创建事件


另外,我不知道为什么时区必须是格林尼治标准时间+7:08,但这是我的尝试和错误,让这个时间轮班对我的项目最有效。我也试着把它改成第二个数字,但当我用GMT+7:07:48时,这个对象变成了“Jan 1 1899 8:00:00”。

你可以尝试添加它
cArr[I][1]+cArr[I][2]
新日期(cArr[I][1]+cArr[I][2])
看看@TheMaster第一个建议将字符串连接在一起。它没有添加它们。第二个建议效果不佳,因为有两个日期对象具有自己的日期和时间。例如,[1]将给出[2019年8月8日08:00:00],[2]将给出[1899年1月1日7:30:00]。@Cooper及其周围的工作是有效的!谢谢我有一个类似于你建议的解决方案,谢谢
var day = Utilities.formatDate(cArr[1],"GMT+07:00","MMM dd");
var year = Utilities.formatDate(cArr[1],"GMT+07:00","yyyy");
var ST = Utilities.formatDate(cArr[2],"GMT+07:08","HH:mm");
var ET = Utilities.formatDate(cArr[3],"GMT+07:08","HH:mm");
//then I concatenate them together
var StartTime = new Date(day + " " + ST + " " + year);
var EndTime = new Date(day + " " + ET + " " + year);