Railsアプリケーションで、日付形式に悩まされていることに気づきました。
ビューに日付フィールドがあり、dd/mm/yyとしてフォーマットします。これは、ユーザーが日付を入力する方法であり、datepickerコントロールはこの形式を使用します。
ただし、Active Recordはmm/dd/yyを期待しているようです。
01/03/2010と入力すると、これは2010年1月3日。
25/03/2010と入力すると、これはnull。
ActiveRecordに陛下の日付形式を期待させるにはどうすればよいですか?
RailsのDateTimeは、フォーマットを自動的に検出しようとします。次の形式を検出します:mm/dd/yy
またはdd-mm-yy
またはyyyy-mm-dd
またはyyyy/mm/dd
。 DateTime.parse
にモンキーパッチを適用することもできますが、この問題をアプリケーションの表示に移動したいと思います。
日付の文字列表現としてyyyy-mm-dd [hh:mm:ss]
を使用することを常にお勧めします。複数の日付形式をサポートしている場合は、DatePickerのドキュメントを確認してください。
たとえば、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