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型に変更することはできないため、「カラムの削除⇨カラムの追加」の手順を踏む必要がある。