为什么google apps脚本无法正确处理我的datetime本地输入?
我正在尝试处理一个带有datetime本地字段的表单,以便在公共google日历中创建日历事件。但当我运行程序时,我所有的日期都默认为1969年12月31日下午4点。有人有什么想法吗 我的脚本(以“form”作为参数): 根据此解决方案,我添加了“.000Z”,但即使没有添加,我也遇到了相同的问题: 开始时间和结束时间记录为:为什么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
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)
};