Javascript 如何将字符串转换为ISOString?

Javascript 如何将字符串转换为ISOString?,javascript,google-apps-script,google-calendar-api,Javascript,Google Apps Script,Google Calendar Api,我有3个变量:(1)日期(2)开始时间(3)结束时间 我想把它们作为两个变量(1)Date和StartTime(2)Date和EndTime,这样我就可以创建一个google日历事件 根据我的理解,为了创建google日历事件,我需要传递事件计时的ISO字符串格式。谁能检查一下下面的代码,帮我找到丢失的那块 function createEvent(title,Dt,startTime,endTime,col) { var calendarId = '_____@group.calendar

我有3个变量:(1)日期(2)开始时间(3)结束时间 我想把它们作为两个变量(1)Date和StartTime(2)Date和EndTime,这样我就可以创建一个google日历事件

根据我的理解,为了创建google日历事件,我需要传递事件计时的ISO字符串格式。谁能检查一下下面的代码,帮我找到丢失的那块

 function createEvent(title,Dt,startTime,endTime,col) {
 var calendarId = '_____@group.calendar.google.com';
 Logger.log(Dt); //2016-07-21
 Logger.log(startTime); // 11:55 AM
 Logger.log(typeof(startTime)); //string


 //Help Needed to convert + to ISO

 var event = {
 summary: title,
 start: {
 dateTime: startISO
 },
 end: {
 dateTime: endISO
 },
 colorId: col
 };
 event = Calendar.Events.insert(event, calendarId);
 Logger.log('Event ID: ' + event.getId());

您可以在
日期
对象上使用
.toISOString()
来获取ISO字符串,但Google Calendar要求的格式与此略有不同,但这是一个快速解决方案。从正常转换开始:

(new Date()).toISOString(); // "2016-07-29T00:00:00.000Z"

var startTime = new Date();
var isoStartTime = startTime.toISOString();
如果需要从单独的对象创建
日期
,可以:

var yourDate = '2016-07-29';
var yourTime = '11:55 AM';

var startTime = new Date(yourDate);
startTime.setHours(yourTime.split(':')[0]); // 11
startTime.setMinutes(yourTime.split(':')[1].substr(0,2)); // 55

startTime = startTime.toISOString(); // "2016-07-29T11:55:00.000Z"
然后将其更改为Google正在寻找的内容:

// To RFC 3339...
startTime.substr(0,startTime.length-5)+'Z'; // "2016-07-29T11:55:00Z"

您还可以(可能更喜欢)使用数字而不是字符串来实现所有这些;如果您分别通过
hours
minutes
,它看起来可能比字符串操作更干净:

var startTime = new Date(yourDate);
startTime.setHours(yourHours); // string or int
startTime.setMinutes(yourMinutes); // string or int

它不起作用。函数Test1(){var yourDate='2016-07-29';Logger.log(yourDate);var yourTime='11:55 AM';Logger.log(yourTime);var startTime=new Date(yourDate);Logger.log(startTime);startTime.setHours(yourTime.split(':')[0]);//11 Logger.log(startTime);startTime.setMinutes(yourTime.split(':')[1].substr(0,2));//55 Logger.log(startTime);startTime.toISOString();Logger.log(startTime);}错误:RangeError:日期无效。(第18行,文件“Test1”)日志输出:Wed Dec 31 16:00:00 GMT-08:00 1969看起来RFC3339少了一个字符:我上面写的是
…000Z
,但他们的文档()要求RFC3339显示
…00Z
您可以通过以下三个步骤获得ISO,1)将您的时间从上午/下午转换为24小时,分别为11:55 am=11:55和11:55 pm=23:55,2)然后将日期和时间与2016-07-21 11:55这样的空格连接起来,然后3)从字符串中获取日期,作为var date=新日期(“2016-07-21 11:55”);哪个是ISO日期
var startTime = new Date(yourDate);
startTime.setHours(yourHours); // string or int
startTime.setMinutes(yourMinutes); // string or int