So we decided to use the Google Calendar API in one of our applications to allow users to easily view and export events from outside the app. In general, the API was working well – I was using the Zend library to interact with Google and things seemed fine.
That was until I tried to embed the calendar using Google’s iframe embed code. For some reason, events weren’t showing up in the embeded iframe calendar even though they were showing up in the actual calendar on calendar.google.com. Even stranger, the events were present in a JSON object on the embeded page and they were showing up in the RSS feed for the calendar.
After literally days of debugging and experimenting I finally found out the culprit.
For some reason, events created via the API that start and end at exactly the same time – say a start date of 08-05-2009 10:00:00 and an end date of 08-05-2009 10:00:00 don’t render on the embeded iframe calendar.
What is even more bizarre is that if you create an event via the web interface that starts and ends at the same time, it will render correctly on an embeded calendar.
Anyway, that was weird. All the events without explicit start and end times now last a grand total of one minute.
PS. Kudos to Daum for finding a constant for PHP’s date() function to generate RFC3339 timestamps.
Use like so:
$date = date(DATE_RFC3339, $timestamp);
To get back a valid RFC3339 for the Google Calendar API.