The links in Dave's post are great. Just to put a few technical details about the google links into an answer here on SO:
Google Calendar Link
<a href="http://www.google.com/calendar/event?action=TEMPLATE&text=Example%20Event&dates=20131124T010000Z/20131124T020000Z&details=Event%20Details%20Here&location=123%20Main%20St%2C%20Example%2C%20NY">Add to gCal</a>
the parameters being:
- action=TEMPLATE (required)
- text (url encoded name of the event)
- dates (ISO date format, startdate/enddate - must have both start and end time - the button generator will let you leave the endtime blank, but you must have one or it won't work.)
- to use the user's timezone: 20131208T160000/20131208T180000
- to use global time, convert to UTC, then use 20131208T160000Z/20131208T180000Z
- all day events, you can use 20131208/20131209 - note that the button generator gets it wrong. You must use the following date as the end date for a one day all day event, or +1 day to whatever you want the end date to be.
- details (url encoded event description/details)
- location (url encoded location of the event - make sure it's an address google maps can read easily)
Update Feb 2018:
Here's a new link structure that seems to support the new google version of google calendar w/o requiring API interaction:
https://calendar.google.com/calendar/r/eventedit?text=My+Custom+Event&dates=20180512T230000Z/20180513T030000Z&details=For+details,+link+here:+https://example.com/tickets-43251101208&location=Garage+Boston+-+20+Linden+Street+-+Allston,+MA+02134
New base url: https://calendar.google.com/calendar/r/eventedit
New parameters:
- text (name of the event)
- dates (ISO date format, startdate/enddate - must have both start and end time)
- an event w/ start/end times: 20131208T160000/20131208T180000
- all day events, you can use 20131208/20131209 - end date must be +1 day to whatever you want the end date to be.
- ctz (timezone such as America/New_York - leave blank to use the user's default timezone. Highly recommended to include this in almost all situations. For example, a reminder for a video conference: if three people in different timezones clicked this link and set a reminder for their "own" Tuesday at 10:00am, this would not work out well.)
- details (url encoded event description/details)
- location (url encoded location of the event - make sure it's an address google maps can read easily)
- add (comma separated list of emails - adds guests to your new event)
Notes:
- the old url structure above now redirects here
- supports https
- deals w/ timezones better
- accepts
+
for space in addition to %20
(urlencode
vs rawurlencode
in php - both work)