1
0

More than 3 years have passed since last update.

【注意点まとめ】Ruby 時間(Time型/Date型/DateTime型)をカラムに設定する

Posted at

Time型・Date型・DateTime型

Time型

  • UNIXタイムで日時を扱うクラス
irb(main):001:0> Time.now
=> 2021-01-02 01:41:25.0792755 +0000

Date型

  • 日付を扱うクラス
irb(main):004:0> Date.today
=> Sat, 02 Jan 2021

DateTime型

  • 日付と時刻を扱うクラス
  • Dateのサブクラスなので、Dateのメソッドが使える
irb(main):003:0> DateTime.now
=> Sat, 02 Jan 2021 01:41:40 +0000

validation

  • いつも通りのやり方(integer型やstring型と同じやり方)が通用しない。
  • エラー文を追加するメソッドを独自に定義し、validationとする必要がある。

validate :day_after_today

def day_after_today
    errors.add(:food_date, 'は、今日を含む過去の日付を入力して下さい') if !food_date.nil? && (food_date > Time.zone.today)
end
  • 明日以降の日付を入力するとエラーとなるvalidationの例
  • validateで、sは要らない

東京時間の設定

time_zoneの設定をしないと、デフォルトで協定世界時間(UTC)で記録されてしまいます。

module App
  class Application < Rails::Application
    config.time_zone = 'Tokyo'
  end
end

比較

  • Time型と、DateTime型の比較は、秒単位
  • 以下は、DateTime型の変数の差が12時間以上となる様、validationをかけた時の例
def time_before_give
  errors.add(:limit_time, 'は、お裾分け時間より12時間以上前の日時を入力して下さい') if !limit_time.nil? && give_time - limit_time < 12 * 60 * 60
end

カラムの型変更

  • Time型から、DateTime型に変更することはできないため、「カラムの削除⇨カラムの追加」の手順を踏む必要がある。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0