A few days ago I discovered a quick & easy way few to use cookies to help your Rails app get a user’s timezone, without prompting. It’s pretty easy to implement:

First up: set a cookie, any cookie:

var date = new Date();
// returns offset from GMT in minutes
var offset = date.getTimezoneOffset();

// set a cookie however you see fit, I like to use jQuery.cookie
$.cookie('timezone', offset);

Then, in application.rb or wherever you like:

def browser_timezone
 return nil if cookies[:timezone].blank?
 `browser_timezone ||= begin
    min = cookies[:timezone].to_i
    TimeZone[(min + (-2 * min)).minutes]

The cookie gives you minutes from GMT, but `ActiveSupport::TimeZone@ expects seconds from GMT.

Anyway, hopefully someone will find my pointing it out useful. It may buckle under pressure (with daylight savings), but guessing and getting it right 50% of the time is better than forcing user interaction. Probably.