Hi,

Thanks for bringing this issue up.  Actually since I never try to access my
calendar with a different local timezone, so I never actually discover this
dilemma.  Yes you are right, it appears that both google.gdata.DateTime and
the native JavaScript Date object both are quite "smart" in converting the
date information to your local timezone on your browser (which comes from
your OS).

It seems like there is no way within JavaScript Date object to re-set the
timezone - http://www.w3schools.com/jsref/jsref_obj_date.asp

So one way is you can get is deal with your time through UTC timezone
(GMT-0), so you will call getUTCMonth(), getUTCXXX() and so on.

Another way you can get the actual time information consistent with your
calendar timezone is to retrieve the datetime string label directly (without
using google.gdata.DateTime object).  You just need to write some regex to
parse out all differnet information.  You can get the raw datetime string
like this -

entry.gd$when[0].startTime

Hope it helps,
Austin



On Sun, Mar 23, 2008 at 6:21 PM, G <[EMAIL PROTECTED]> wrote:

>
> Hi,
> I've taken the sample script from the URL at the bottom of this post,
> and modified it slightly to suit.  It retrieves upcoming google
> calendar events and outputs them as a list in a styled div element.
> The script works great, except that the dates & times change relative
> to the time zone setting on the viewer's computer.  I would prefer if
> they were displayed in the time zone specified in the calendar, or
> (even better) in a time zone that I specify.  Does anyone know how to
> accomplish this, if it is possible?  Here is the script:
>
>
> /*  Output Google Calendar Events in a Styled <div> element */
>
> /* Callback function for the Google data JS client library to call
> when an error occurs during the retrieval of the feed.  Details
> available depend partly on the web browser, but this shows a few basic
> examples. In the case of a privileged environment using ClientLogin
> authentication, there may also be an e.type attribute in some cases.
> */
> function handleGDError(e) {
>  if (e instanceof Error) {
>    /* alert with the error line number, file and message */
>    alert('Error at line ' + e.lineNumber + ' in ' + e.fileName + '\n'
> + 'Message: ' + e.message + '\n' + '\n' + 'Please contact the
> webmaster.');
>    /* if available, output HTTP error code and status text */
>    if (e.cause) {
>      var status = e.cause.status;
>      var statusText = e.cause.statusText;
>      alert('Root cause: HTTP error ' + status + ' with status text
> of: ' + statusText);
>         }
>        }
>  else {
>    alert(e.toString());
>  }
> }
>
> /* Callback function for the Google data JS client library to call
> with a feed of events retrieved.  Creates an unordered list of events
> in a human-readable form.  This list of events is added into a div
> called 'events'.  The title for the calendar is placed in a div called
> 'calendarTitle' */
> function listEvents(feedRoot) {
>  var entries = feedRoot.feed.getEntries();
>
>  var eventDiv = document.getElementById('events');
>  eventDiv.innerHTML = '';
>
>  /* set the calendarTitle div with the name of the calendar */
>  // document.getElementById('calendarTitle').innerHTML = "Calendar: "
> + feedRoot.feed.title.$t;
>
>  /* output message if there are no events */
>  if (entries.length === 0) { eventDiv.innerHTML = '<p>No Results Were
> Found</p>'; return; }
>  else {
>
>  /* otherwise, create a new unordered list */
>  var ul = document.createElement('ul');
>
>  /* loop through each event in the feed */
>  var len = entries.length;
>  for (var i = 0; i < len; i++) {
>    var entry = entries[i];
>    var title = entry.getTitle().getText();
>    var where = entry.getLocations()[0].getValueString();
>    var startDateTime = null;
>    var startJSDate = null;
>    var times = entry.getTimes();
>    if (times.length > 0) {
>      startDateTime = times[0].getStartTime();
>      startJSDate = startDateTime.getDate();
>      endDateTime = times[0].getEndTime();
>      endJSDate = endDateTime.getDate();
>     }
>    var entryLinkHref = ((entry.getHtmlLink() !== null) ?
> entry.getHtmlLink().getHref() : '#');
>
>  /* format the dates; 12-hour format with month names */
>  var monthnames = new Array("Jan", "Feb", "March", "April", "May",
> "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec");
>
>        /* start date & time */
>                var starthours = ((startJSDate.getHours() === 0) ? 12 :
> (startJSDate.getHours() > 12) ? startJSDate.getHours() - 12 :
> startJSDate.getHours());
>                var startminutes = ((startJSDate.getMinutes() < 10) ? '0' +
> startJSDate.getMinutes() : startJSDate.getMinutes());
>                var startampm = ((startJSDate.getHours() > 11) ? 'p.m.' : '
> a.m.');
>
>                var startdate = monthnames[startJSDate.getMonth()] + ' ' +
> startJSDate.getDate() + ', ' + startJSDate.getFullYear();
>                var starttime =  starthours + ':' + startminutes + ' ' +
> startampm;
>
>        /* end date & time */
>                var endhours = ((endJSDate.getHours() === 0) ? 12 :
> (endJSDate.getHours() > 12) ? endJSDate.getHours() - 12 :
> endJSDate.getHours());
>                var endminutes = ((endJSDate.getMinutes() < 10) ? '0' +
> endJSDate.getMinutes() : endJSDate.getMinutes());
>                var endampm = ((endJSDate.getHours() > 11) ? 'p.m.' : '
> a.m.');
>
>                var enddate = monthnames[endJSDate.getMonth()] + ' ' +
> endJSDate.getDate() + ', ' + endJSDate.getFullYear();
>                var endtime =  endhours + ':' + endminutes + ' ' + endampm;
>
>        /* create the date string */
>            var dateString = ((startdate == enddate && starttime ==
> endtime) ? startdate + ' ' + starttime : (startdate == enddate &&
> starttime != endtime) ? startdate + ' ' + starttime + ' - ' +
> endtime : startdate + ' ' + starttime + ' - ' + enddate + ' ' +
> endtime);
>
>  /* output the event in HTML */
>  var li = document.createElement('li');
>  entryLink = document.createElement('a');
>  entryLink.setAttribute('href', entryLinkHref);
>  entryLink.setAttribute('title', 'Open Event Details in a New
> Window');
>  entryLink.setAttribute('target', '_blank');
>  entryLink.appendChild(document.createTextNode(title + ''));
>  li.appendChild(entryLink);
>  ul.appendChild(li);
>                var ul2 = document.createElement("ul");
>                var li2 = document.createElement("li");
>                      li2.appendChild(document.createTextNode(dateString));
>                ul2.appendChild(li2);
>                var li3 = document.createElement("li");
>                          li3.appendChild(document.createTextNode('Where: '
> + where ));
>                ul2.appendChild(li3);
>                ul.appendChild(ul2);
>  }
>  eventDiv.appendChild(ul);
>  }
> }
>
> /* Uses Google data JS client library to retrieve a calendar feed from
> the specified URL.  The feed is controlled by several query parameters
> and a callback function is called to process the feed results. */
> function loadCalendar(calendarUrl) {
>  var service = new google.gdata.calendar.CalendarService('gdata-js-
> client-samples-simple');
>  var query = new
> google.gdata.calendar.CalendarEventQuery(calendarUrl);
>  query.setOrderBy('starttime');
>  query.setSortOrder('ascending');
>  query.setFutureEvents(true);
>  query.setSingleEvents(true);
>
>  /* set the maximum results */
>  query.setMaxResults(10);
>  service.getEventsFeed(query, listEvents, handleGDError);
>  }
>
> /* Determines the full calendar Url based upon the calendarAddress
> argument and calls loadCalendar with the calendarUrl value. */
> function loadCalendarByAddress() {
>  var calendarAddress = ' (removed)  ';  // Google Calendar Address
>  var calendarUrl = 'http://www.google.com/calendar/feeds/' +
> calendarAddress + '/public/full';
>  loadCalendar(calendarUrl);
>  }
>
> /* Loads the Google data JavaScript client library */
> google.load("gdata", "1");
> function init() {
>        /* init the Google data JS client library with an error handler */
>           google.gdata.client.init(handleGDError);
>
>        /* load the calendar */
>           loadCalendarByAddress();
>  }
>
> google.setOnLoadCallback(init);
>
> ___________________________________
> Script source (slightly modified):
>
> http://gdata-javascript-client.googlecode.com/svn/trunk/samples/calendar/simple_sample/simple_sample.html
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Calendar Data API" group.
To post to this group, send email to 
[email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-calendar-help-dataapi?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to