2016-07-29 25 views
1

Ich habe 3 Variablen: (1) Datum (2) StartTime (3) EndTime Ich möchte sie als zwei Variablen (1) Datum und StartTime (2) Datum und EndTime, so dass ich einen Google Kalender erstellen kann Veranstaltung.Wie konvertiert man eine Zeichenfolge in ISOString?

Nach meinem Verständnis muss ich ISO-String-Format für Ereignis Timings übergeben, um ein Google-Kalenderereignis zu erstellen. Kann jemand den folgenden Code überprüfen und mir mit dem fehlenden Stück helfen.

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

Sie können ISO erhalten, indem folgende drei Schritte, 1) Wandeln Sie Ihre Zeit von am/pm bis 24 Stunden als 11.55 = 11 : 55 und 11:55 PM = 23:55, 2) verketten Sie dann Datum und Uhrzeit mit Leerzeichen wie 2016-07-21 11:55 und dann 3) Datum von String als var date = new Date ("2016-07 -21 11:55 "); Das wird ISO-Datum sein – Vickyexpert

Antwort

2

Sie können .toISOString() auf das Date Objekt verwenden, um einen ISO-String, aber Google Kalender ist ein etwas anderes Format als dies anfordert, aber es ist eine schnelle Lösung. Beginnen Sie mit einer normalen Umwandlung:

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

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

Wenn Sie die Date von getrennten Objekten vornehmen müssen Sie:

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" 

es dann ändern, was Google sucht nach:

// 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'; 

Sie können auch (und wahrscheinlich bevorzugt) Zahlen anstelle von Strings verwenden; wenn Sie hours und minutes separat passieren könnte es aussehen sauberer ist als die String-Operation:

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

Es hat nicht funktioniert. Funktion Test1() { var yourDate = '2016-07-29'; Logger.log (IhrDatum); var yourTime = '11: 55 AM '; Logger.log (IhreZeit); var startTime = neues Datum (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); } ** Fehler: ** RangeError: Datum ist ungültig. (Zeile 18, Datei "Test1") ** Log-Ausgabe: ** Mi Dez 31 16:00:00 GMT-08: 00 1969 – user2518

+0

Sieht aus wie die RFC3339 hat ein Zeichen weniger: https: //tools.ietf .org/html/rfc3339 Was ich oben geschrieben habe, hat '... 000Z', aber ihre Dokumente (https://developers.google.com/google-apps/calendar/v3/reference/events) fragen nach RFC3339, die '... 00Z' zeigt –

Verwandte Themen