Since the default time in the database is in utc, I wanted to be able to still display it in the users correct time. To do this I had to take column :created_at
and
I've found there are two ways to do this:
1. Javascript
This is the easier method because it is very short and doesn't involve adding a db field. It works because it uses the users timezone from their browser. This answer gives insight on how to do this.
2. From the Database
This process can be found in this railscast.
Essentially store a time_zone field in the users table. Then use an before_filter (although an around_filter might be a better idea) to set the timezone in the controller.
before_filter :set_time_zone
private
def set_time_zone
Time.zone = current_user.time_zone if current_user
end
You can target just ActiveAdmin by telling it to always use a particular filter in config/initializers/active_admin.rb
, by adding a line like this:
config.before_action :set_admin_timezone
(or config.before_filter :set_admin_timezone
for versions of Rails before Rails 4)
Then in your ApplicationController, you can just define the method set_admin_timezone, and ActiveAdmin will use it. For example:
def set_admin_timezone
Time.zone = 'Eastern Time (US & Canada)'
end
You should be able look up the current admin user in that method (in order to get their particular timezone), but I haven't tried that.
So for my understanding, you need two things:
Localtime/Timezone
You can achieve this by set the right timezone of your rails app, the active_admin will pick up that by default. For example, in your rails config file(config/application.rb):
config.time_zone = 'Eastern Time (US & Canada)'
Default time format
You can refer this Change default date formatter in active admin
Good luck~