为什么google apps脚本无法正确处理我的datetime本地输入?

为什么google apps脚本无法正确处理我的datetime本地输入?,datetime,google-apps-script,Datetime,Google Apps Script,我正在尝试处理一个带有datetime本地字段的表单,以便在公共google日历中创建日历事件。但当我运行程序时,我所有的日期都默认为1969年12月31日下午4点。有人有什么想法吗 我的脚本(以“form”作为参数): 根据此解决方案,我添加了“.000Z”,但即使没有添加,我也遇到了相同的问题: 开始时间和结束时间记录为: 2016-03-15T17:30 and 2016-03-15T19:30 但这在执行记录中: Calendar.createEvent([NEW EVENT, Wed

我正在尝试处理一个带有datetime本地字段的表单,以便在公共google日历中创建日历事件。但当我运行程序时,我所有的日期都默认为1969年12月31日下午4点。有人有什么想法吗

我的脚本(以“form”作为参数):

根据此解决方案,我添加了“.000Z”,但即使没有添加,我也遇到了相同的问题:

开始时间和结束时间记录为:

2016-03-15T17:30 and 2016-03-15T19:30
但这在执行记录中:

Calendar.createEvent([NEW EVENT, Wed Dec 31 16:00:00 PST 1969, Wed Dec 31 16:00:00 PST 1969])

有很多方法可以在JavaScript中设置日期对象,但是要为Google日历设置正确的日期,必须以非常具体的方式进行。您必须获得日历时区。对于许多人来说,如果他们脚本的用户都在同一时区,那么代码就可以工作了。当用户跨越不同的时区,或者脚本的时区与日历的时区不同时,就会出现问题。代码必须首先构造一个有效的日期字符串,然后使用该日期字符串创建日期对象。您可以创建一个没有日期字符串的日期对象,这在大多数情况下都是可取的,因为人们可能会弄乱代码来创建日期字符串,但在这种情况下,您别无选择(据我所知)。为什么?这是因为时区偏移设置。时区偏移设置包含在日期字符串中。这是一条关键信息,它可以确保您的日期设置正确,包括夏令时

function setCalendarEvent(){

  var startTime = "2016-03-15T17:30";
  var endTime = "2016-03-15T19:30";

  //Always get the time zone of the calendar.  If you don't do that, users accross different times zones will write bad dates
  var calTimeZone = CalendarApp.getDefaultCalendar().getTimeZone();

  //Construct a valid date string from the data
  var startYr = startTime.slice(0,4);
  var endYr = endTime.slice(0,4);

  var startMonth = startTime.slice(5,7);
  var endMonth = endTime.slice(5,7);

  var startDay = startTime.slice(8,10);
  var endDay = endTime.slice(8,10);

  var startHrAndMin = startTime.slice(11,17);
  var endHrAndMin = endTime.slice(11,17);

  var startDateString = startMonth + "/" + startDay + "/" + startYr + " " + startHrAndMin + ":00 ";

  var timeZoneOffset = Utilities.formatDate(new Date(startDateString),calTimeZone, "Z");

  var startDateAsDate = new Date(startDateString + " " + timeZoneOffset);

  Logger.log('startDateAsDate: ' + startDateAsDate)
};
function setCalendarEvent(){

  var startTime = "2016-03-15T17:30";
  var endTime = "2016-03-15T19:30";

  //Always get the time zone of the calendar.  If you don't do that, users accross different times zones will write bad dates
  var calTimeZone = CalendarApp.getDefaultCalendar().getTimeZone();

  //Construct a valid date string from the data
  var startYr = startTime.slice(0,4);
  var endYr = endTime.slice(0,4);

  var startMonth = startTime.slice(5,7);
  var endMonth = endTime.slice(5,7);

  var startDay = startTime.slice(8,10);
  var endDay = endTime.slice(8,10);

  var startHrAndMin = startTime.slice(11,17);
  var endHrAndMin = endTime.slice(11,17);

  var startDateString = startMonth + "/" + startDay + "/" + startYr + " " + startHrAndMin + ":00 ";

  var timeZoneOffset = Utilities.formatDate(new Date(startDateString),calTimeZone, "Z");

  var startDateAsDate = new Date(startDateString + " " + timeZoneOffset);

  Logger.log('startDateAsDate: ' + startDateAsDate)
};