Question

I have a multi-timezone web application that stores all of the datetime values in UTC in the database, when actions happen on the server, I can easily convert the time into UTC.

However, when a client enters a time or time span, what is the best way to detect and store it?

I am currently doing the following:

  1. Get the value of Date.getTimezoneOffset() (javascript)
  2. Post that to the server-side code via the ICallbackEventHandler on Page.
  3. Store that value in the session
  4. On any subsequent request, calculate the output/input datetime value using the client's timezone.

Regardless of the actual implementation, this seems like an in-elegant solution. Does anyone have a better method?

Was it helpful?

Solution

I was doing something very similar, but I now think I prefer to use javascript to convert all times to local on the client side. The server will give all times in UTC in the generated page, and the javascript will convert it once the page loads.

This eliminates confusion on the server side code, as I always know what time it is (UTC). On the client side I'm using jquery and the each() function to format all the time values at once. I write out each of the times as a unix time in a hidden field to make this easy to process with jquery.

The only problems I see with this method is that a) I don't have a real good date/time formatting routine yet in javascript, and b) if the user has javascript turned off, then it doesn't work.

OTHER TIPS

You could use the "header" property of the HttpRequest Object to query the "If-Modified-Since" header sent by the client. This header should contain a date in a format that includes the timezone of the client, like this:

If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT

a simple substring extraction will give you the timezone code. However, I'm afraid not all browsers are coherent in sending that header, so you should experiment a bit about it.

regards, Fabrizio

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top