Generates well formed link to add event to one's Google Calendar. More info on Google Calendar event publisher guide
Source:
//declare namespace
GoogleCalendar = function() {
return {
/**
* Returns link to add to google calendar
* @param event = {
what, //title
dates : {
start: {
year,month,day,hour,minute
},
end: {
year,month,day,hour,minute
}
},
location,
trp, //show busy true/false
url : window.location.href
* }
*/
getGoogleCalendarEventLink : function(event) {
var url = "http://www.google.com/calendar/event?action=TEMPLATE";
url += "&text=" + urlFormat(event.what);
url += "&dates=" + getDateString(event.dates);
url += "&details=" + urlFormat(event.url);
url += "&location=" + urlFormat(event.location);
url += "&trp=" + event.trp;
url += "&sprop=" + urlFormat(event.url);
return url;
}
};
function urlFormat(str) {
var newstr = str.replace(/^\s+/g, "");
return encodeURIComponent(newstr.replace(/\s+$/g, ""));
}
// Determines the CGI argument for dates parameter based on user input
function getDateString( dates ) {
var dateString = "";
dateString += getUTCDateString(dates.start.year,
dates.start.month,
dates.start.day,
dates.start.hour,
dates.start.minute);
dateString += "/";
dateString += getUTCDateString(dates.end.year,
dates.end.month,
dates.end.day,
dates.end.hour,
dates.end.minute);
return dateString;
}
// Converts the given time into UTC, returns this in a string
function getUTCDateString(y,m,d,h,min) {
var timeObj = new Date(y,m,d,h,min);
var dateStr = "" + timeObj.getUTCFullYear();
dateStr += stringPad(timeObj.getUTCMonth()+1);
dateStr += stringPad(timeObj.getUTCDate());
dateStr += "T" + stringPad(timeObj.getUTCHours());
dateStr += stringPad(timeObj.getUTCMinutes()) + "00Z";
return dateStr;
}
// Add a leading '0' if string is only 1 char
function stringPad(str) {
var newStr = "" + str;
if (newStr.length == 1) {
newStr = "0" + newStr;
}
return newStr;
}
}();
Usage:
//javascript
var link = document.getElementById('addToCalendar'),
event = {
what : "Friday Beers",
dates : {
start: {
year : "2009",
month : "6",
day : "21",
hour : "16",
minute : "0"
},
end: {
year : "2009",
month : "6",
day : "21",
hour : "18",
minute : "0"
}
},
location : "Sezam st. 5, Neverland, Universe ",
trp: false,
url : "http://www.example.com/event_description"
};
link.href = GoogleCalendar.getGoogleCalendarEventLink(event);
....
<!-- HTML Code -->
<a href="#" id="addToCalendar">Add event to my Google Calendar</a>