This page looks best with JavaScript enabled

【Rails】date_field, datetime_field, time_fieldの初期値の形式

 ·  ☕ 2 分で読めます
✏️

前提

date型のカラムをvalueの引数に渡すと、to_sされて"2021-09-06"になる。
datetime型のカラムはActiveSupport::TimeWithZoneなので、valueの引数に渡すと、to_sされて"2021-09-06 00:16:12 +0900"になる。

date_field

カラムがdateのとき

1
  = f.date_field :birthday, value: user.birthday

内部的にto_sされて、user.birthday.strftime('%Y-%m-%d')と同じになる。

1
<input value="2021-09-06" type="date" name="user[birthday]" id="user_birthday">

カラムがdatetimeのとき

1
  = f.date_field :published_at, value: article.published_at.to_date

デフォルトだとvalue="2021-09-06 00:16:12 +0900"になるので、フォームは日付として見なしてくれない。なので、to_dateで日付に変換する。

image

datetime_field

typeがdatetime-localになるので、date, datetimeどちらの場合もstrftime('%Y-%m-%dT%T')"2021-09-06T00:16:12"の形する必要がある(Tは文字列)。

1
  = f.datetime_field :published_at, value: article.published_at.strftime('%Y-%m-%dT%T')
1
<input value="2021-09-06T00:16:12" type="datetime-local" name="article[published_at]" id="article_published_at">

image

time_field

time_fieldでは、時:分:秒時:分どちらでもいい。

time 入力欄を含むフォームが送信されると、フォームのデータに含められる前に値がエンコードされます。 time 入力欄のフォームのデータ項目は、常にname=hh%3Ammの形式か、秒が含まれる場合はname=hh%3Amm%3assの形式になります。
<input type="time"> - HTML: HyperText Markup Language | MDN

1
  = f.time_field :published_at, value: article.published_at.strftime('%R')
1
<input value="00:16" type="time" ame="article[published_at]" id="article_published_at">

image

1
  = f.time_field :published_at, value: article.published_at.strftime('%T')
1
<input value="00:16:12" type="time" ame="article[published_at]" id="article_published_at">

image

全体参考

Share on

END
END
@aiandrox

目次