Rails ActiveRecord日期解析为i18n(特别是欧洲日期格式)

时间:2010-07-29 18:44:58

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

我正在为澳大利亚网站开设一个rails项目。因此,他们希望能够以更加欧洲标准的'dd / mm / yyyy'输入日期格式,而不是以美国为中心的'mm / dd / yyyy'。我有一个带有Date字段的ActiveRecord模型。我正在使用jQuery的datepicker在文本字段上提供日期选择,并将日期设置为正确的格式。但是,当我尝试保存记录时,它的日期错误。即使我根据i18n指南在自动化程序中设置了自定义日期格式。

>> b = BlogPost.new
>> b.posted_on = '20/07/2010'
=> "20/07/2010"
>> b.posted_on 
=> nil
>> b.posted_on = '07/20/2010'
=> Tue, 20 Jul 2010

似乎Rails只是使用Date.parse将字符串转换为Date对象。有没有办法解决整个项目的问题?我不想为每个模型编写自定义代码。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

尝试更改默认日期格式(在config / environment.rb中)

ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.
    merge!(default => '%d/%m/%Y %H:%M')

在此处了解更多信息http://blog.nominet.org.uk/tech/2007/06/14/date-and-time-formating-issues-in-ruby-on-rails/