Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the best way to detect and store the timezone the client of a web app is in?

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?

like image 906
Zachary Yates Avatar asked Oct 07 '08 18:10

Zachary Yates


2 Answers

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 really good date/time formatting routine yet in javascript, and

b) if the user has javascript turned off, then it doesn't work.

like image 88
Mnebuerquo Avatar answered Nov 09 '22 04:11

Mnebuerquo


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

like image 23
Hermooz Avatar answered Nov 09 '22 05:11

Hermooz