ActiveRecord日期格式

时间:2010-03-27 16:22:34

标签: ruby-on-rails activerecord date-format

我在Rails应用程序中遇到了日期格式的烦恼。

我的视图中有一个日期字段,我希望将其格式化为 dd / mm / yy 。这是用户期望输入日期的方式,而datepicker控件使用此格式。

但是,Active Record似乎期待 mm / dd / yy

如果我输入 01/03/2010 ,则会将其输入为 2010年1月3日 。< / p>

如果我输入 25/03/2010 ,则会将其放入 null

如何让ActiveRecord期待Her Majesties日期格式?

3 个答案:

答案 0 :(得分:20)

Rails'DateTime尝试自动检测格式。它将检测以下格式:mm/dd/yydd-mm-yyyyyy-mm-ddyyyy/mm/dd。您可以修补DateTime.parse,但我宁愿将此问题移至您应用的查看

我总是建议使用yyyy-mm-dd [hh:mm:ss]作为日期的字符串表示。如果它支持多种日期格式,请查看DatePicker的文档。

例如,jQuery日期选择器覆盖了dateFormat(对于发送到服务器的数据,将其设置为yyyy-mm-dd)以及altFormat(对于输入用户看到的内容,将其设置为dd/mm/yyyy)。

答案 1 :(得分:12)

将名为rails_defaults.rb的文件添加到config\initializers目录;以下几行:

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

重新启动服务器,你就可以了。

答案 2 :(得分:2)

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