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で保存しておいた方が色々と便利だと思うから。
以上です。
  

何かありましたらコメントをどうぞ

comments powered by Disqus

人気の記事

950 Points チリ出身のギタリストが弾くドラゴンボールZがむちゃくちゃかっこいい…
774 Points Wordpress + Heroku + PostgreSQL + Amazon S3 = ¥0 / 無料でサイト運営
700 Points Rubyのチートシート 変数 / クラス / モジュール
524 Points Rubyのチートシート / アクティブサポート
451 Points 紙のデザイナーがウェブ開発できるようになるまでに必要なこと
435 Points Rails / Google Analyticsのデータを使って分析や管理画面のためのグラフをつくる
323 Points RailsとHerokuでノーティフィケーションをプッシュする / PusherとTurbolinksの兼ね合い
222 Points Rails / RSpec テスト書いたことない メンドクサイ(n´Д`)という時のチートシート
193 Points Rails / Ajaxを使って画面遷移しない一時保存機能をつける
193 Points Protractorでスクレイピングしてみた