やったこと
Rails5 で日付、日時をフォーマットする方法を調べます。
確認環境
$ ruby --version
ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin17]
$ rails --version
Rails 5.2.3
調査
やったこと
Rails5 ではデフォルトで日付のバリデーションがないようなので、実装方法を調べました。
task.expire_date という タスクの有効期限について、日付のバリデーションをかけます。
調査
app/models/task.rb
class Task < ApplicationRecord
validate :expire_date_is_valid?
private
def expire_date_is_valid?
begin
Date.parse self.expire_date.to_s if self.expire_date.present?
rescue ArgumentError
errors.add(
:expire_date,
'無効な日付です'
)
end
end
end
Date.parse の挙動も試してみました。
$ rails c
irb(main):001:0> Date.parse(888)
Traceback (most recent call last):
2: from (irb):1
1: from (irb):1:in `parse'
TypeError (no implicit conversion of Integer into String)
irb(main):002:0> Date.parse('20190509')
=> Thu, 09 May 2019
irb(main):003:0> Date.parse('2019-05-09')
=> Thu, 09 May 2019
irb(main):004:0> Date.parse('19-05-09')
=> Thu, 09 May 2019
irb(main):005:0> Date.parse('9919-05-09')
=> Fri, 09 May 9919
irb(main):006:0> Date.parse('11')
=> Sat, 11 May 2019
これをみると、厳密なチェックは出来ていないので、使用するときは注意してください。