【问题标题】:Rails ActiveRecord date parsing for i18n (specifically european date formats)用于 i18n 的 Rails ActiveRecord 日期解析(特别是欧洲日期格式)
【发布时间】:2011-03-22 21:50:46
【问题描述】:

我正在为一个澳大利亚网站开发 Rails 项目。因此,他们希望能够以更欧洲标准的“dd/mm/yyyy”而不是以美国为中心的“mm/dd/yyyy”输入日期格式。我有一个带有日期字段的 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 对象。有没有办法为整个项目解决这个问题?我不想为每个模型编写自定义代码。

【问题讨论】:

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


    【解决方案1】:
    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
    

    【讨论】:

    • 解决方案有效且简单。如果您需要更具包容性的解决方案,请参阅 delocalizei18n_alchemy
    【解决方案2】:

    尝试更改默认日期格式(在 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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 2012-08-05
      相关资源
      最近更新 更多