我正在尝试使用datetime-local字段处理表单,以在公共Google日历中创建日历事件。但是当我运行程序时,我的所有日期都默认为1969年12月31日下午4点。有人有什么想法吗?
我的脚本(以“形式”作为参数):
var event = cal.createEvent(form.myTitle, new Date(form.startTime+".000Z"), new Date(form.endTime+".000Z"));
Logger.log(form.startTime+" and "+form.endTime);
我根据此解决方案添加了“.000Z”,但即使不添加它也遇到了同样的问题:Why does my Date object in Google Apps Script return NaN
将startTime和endTime记录为:
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])
答案 0 :(得分:0)
有许多方法可以在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)
};