ActiveAdminの:datetime_pickerの初期値を設定するのに詰まったのでメモ

↑これ。
「ActiveAdmin datetime_picker」等でググると、jQueryUIのモジュールやUIライブラリが引っかかるけど、
これはJSではない (気づくのに2時間ぐらいかかった)
https://developer.mozilla.org/ja/docs/Web/HTML/Element/Input/datetime-local
HTML5.1で追加された <input type="datetime-local">
で、このリッチなUIはブラウザの実装。
(管理画面なのでほとんど問題にならないと思うがブラウザ対応状況はまちまちなので、現時点では表に出す部分で使うべきではない、と思う)
初期値 value
はISO8601で与えなければならない、かつ step
属性を1に設定しないと秒まで指定できないので注意。
あとは上のMDNとスニペットから読み取っていただいて。
<%= f.input :hoged_at, as: :datetime_picker, input_html: { value: Time.current.strftime('%Y-%m-%dT%H:%M:%S') }%>
[1] pry(main)> Time.current.iso8601
=> "2019-02-01T01:46:42+09:00"
[2] pry(main)> Time.current.strftime('%FT%T')
=> "2019-02-01T01:46:43"
#iso8601
と #strftime('%FT%T')
の出力形式は環境に依存するので #strftime('%Y-%m-%dT%H:%M:%S')
が確実
本来の用途とは離れるけど I18n
を使うなら
# locales/ja.yml
ja:
time:
formats:
iso8601_no_zone: "%Y-%m-%dT%H:%M:%S"
l(Time.current, format: :iso8601_no_zone) # => "2019-02-01T01:46:43"
ついで:
秒を切り捨てたTimeWithZone
[3] pry(main)> Time.zone.at(Time.current.to_i / 60 * 60)
=> Fri, 01 Feb 2019 01:47:00 JST +09:00