ActiveRecord の日付形式
-
22-09-2019 - |
質問
Rails アプリケーションの日付形式で問題が発生しました。
ビュー内に次のようにフォーマットしたい日付フィールドがあります。 日/月/年. 。これは、ユーザーが日付を入力することを期待する方法であり、日付ピッカー コントロールはこの形式を使用します。
ただし、Active Recordは期待しているようです 年/月/日.
入ったら 01/03/2010, 、これは次のように入力されます 2010 年 1 月 3 日.
入ったら 25/03/2010, 、これは ヌル.
ActiveRecord で女王陛下の日付形式を期待できるようにするにはどうすればよいですか?
解決
Railsの日時に自動的に書式設定を検出しようとします。 mm/dd/yy
またはdd-mm-yy
またはyyyy-mm-dd
またはyyyy/mm/dd
:それは次の形式を検出します。あなたは猿 - パッチDateTime.parse
をできたが、私はむしろ、表示アプリケーションのにこの問題を移動します。
私はいつも日付の文字列表現としてyyyy-mm-dd [hh:mm:ss]
を使用することをお勧めします。それは、複数の日付の形式をサポートしている場合、あなたの日付ピッカーのマニュアルを参照してください。
例えばjQueryの日付ピッカーは、これはdateFormat
(サーバーに送信されるデータについて、yyyy-mm-dd
に設定し)、ならびにaltFormat
(ユーザが見て入力するため、dd/mm/yyyy
に設定し)で覆われています。
他のヒント
rails_defaults.rb
ディレクトリにconfig\initializers
という名前のファイルを追加します。
Date::DATE_FORMATS[:default] = '%d/%m/%Y'
Time::DATE_FORMATS[:default]= '%d/%m/%Y %H:%M:%S'
サーバを再起動し、あなたが行ってもいいです。
class Date
class << self
def _parse_with_us_format(date, *args)
if date =~ %r{^(\d+)/(\d+)/(\d+)$}
_parse_without_us_format("#{$3.length == 2 ? "20#{$3}" : $3}-#{$1}-#{$2}", *args)
else
_parse_without_us_format(date, *args)
end
end
alias_method_chain :_parse, :us_format
end
end