web-dev-qa-db-ja.com

ActiveRecordの日付形式

Railsアプリケーションで、日付形式に悩まされていることに気づきました。

ビューに日付フィールドがあり、dd/mm/yyとしてフォーマットします。これは、ユーザーが日付を入力する方法であり、datepickerコントロールはこの形式を使用します。

ただし、Active Recordはmm/dd/yyを期待しているようです。

01/03/2010と入力すると、これは2010年1月3日

25/03/2010と入力すると、これはnull

ActiveRecordに陛下の日付形式を期待させるにはどうすればよいですか?

17
Mongus Pong

RailsのDateTimeは、フォーマットを自動的に検出しようとします。次の形式を検出します:mm/dd/yyまたはdd-mm-yyまたはyyyy-mm-ddまたはyyyy/mm/ddDateTime.parseにモンキーパッチを適用することもできますが、この問題をアプリケーションの表示に移動したいと思います。

日付の文字列表現としてyyyy-mm-dd [hh:mm:ss]を使用することを常にお勧めします。複数の日付形式をサポートしている場合は、DatePickerのドキュメントを確認してください。

たとえば、jQueryの日付ピッカーでは、これがdateFormat(サーバーに送信されるデータの場合はyyyy-mm-ddに設定)とaltFormat(入力の場合)でカバーされます。ユーザーに表示されたら、これをdd/mm/yyyyに設定します)。

21

Rails_defaults.rbというファイルをconfig\initializersディレクトリに追加します。次の行で:

Date::DATE_FORMATS[:default] = '%d/%m/%Y'
Time::DATE_FORMATS[:default]= '%d/%m/%Y %H:%M:%S'

サーバーを再起動すると、準備が整います。

12
Harish Shetty
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
2
grosser