Railsで時間を登録するとき
いっつもこんな感じでやっている。
皆はどうやっているんだろうか…?
例えば、ニュースレター/メルマガの配信予約とか。
newsletters_controller.rb
ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def create
@newsletter = Newsletter.new(strong_params)
set_right_time
if @newsletter.save
redirect_to somewhere_path
else
flash[:error] = "Error."
render 'new'
end
end
private
def set_right_time
if @newsletters.will_send_at.present?
Time.zone = "Asia/Tokyo"
@newsletter.will_send_at = Time.zone.parse(strong_params[:will_send_at]).utc
end
end
最初にタイムゾーンを設定して、
フォームから入ってきた文字列をパースしてTimeに変換、さらにそれをUTCに変換して保存している。
ユーザーは日本にいて、日本のサービスの場合。
タイムゾーンはこちらを参照。TZの欄です。
List of tz database time zones - Wikipedia, the free encyclopedia
表示は、UTCを日本時間に変換する。
erb
1
<%= @newsletter.will_send_at.in_time_zone('Asia/Tokyo').strftime('%Y-%m-%d %H:%M') %>
なんだか回りくどいけど、時間はUTCで保存しておいた方が色々と便利だと思うから。
以上です。