2016-07-29 2 views
1

У меня есть 3 переменные: (1) Дата (2) StartTime (3) EndTime Я хотел бы привести их как две переменные (1) Date and StartTime (2) Date and EndTime, чтобы я мог создать календарь Google мероприятие.Как преобразовать строку в ISOString?

Как я понимаю, для создания события календаря Google мне нужно передать формат ISO String для таймингов событий. Может ли кто-нибудь проверить приведенный ниже код и помочь мне с отсутствующим куском.

function createEvent(title,Dt,startTime,endTime,col) { 
var calendarId = '[email protected]'; 
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()); 
+0

вы можете получить ISO, выполнив три шага, 1) Преобразование времени с утра/вечером до 24 часов, как 11:55 = 11 : 55 и 11:55 PM = 23:55, 2), затем соедините дату и время с пробелом, как 2016-07-21 11:55, а затем 3) введите дату из строки как var date = new Date ("2016-07 -21 11:55 "); который будет иметь дату ISO – Vickyexpert

ответ

2

Вы можете использовать .toISOString() на Date объекта, чтобы получить ISO String, но Google Calendar запрашивает немного другой формат, чем это, но это быстро исправить. Начните с нормальным преобразованием:

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

var startTime = new Date(); 
var isoStartTime = startTime.toISOString(); 

Если вам нужно сделать Date из отдельных объектов, вы можете:

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" 

Or

//if the "startTime = startTime.toISOString()" assignment happened 
startTime.split('.')[0]+'Z'; 

//if startTime is a Date object, not a string 
startTime.toISOString().split('.')[0]+'Z'; 

Вы также можете (и, вероятно, предпочтительнее) использовать числа вместо строк для всего этого; если вы проходите hours и minutes отдельно это может выглядеть чище, чем тот строковая операция:

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

Это не сработало. function 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») ** Выход журнала: ** Ср. 31 декабря 16:00:00 GMT-08: 00 1969 – user2518

+0

Похож, что у RFC3339 символ меньше: https: //tools.ietf .org/html/rfc3339 То, что я написал выше, имеет «... 000Z», но их документы (https://developers.google.com/google-apps/calendar/v3/reference/events) запрашивают RFC3339, который показывает '... 00Z' –