【问题标题】:ActiveRecord date formatActiveRecord 日期格式
【发布时间】:2010-03-27 16:22:33
【问题描述】:

我在 Rails 应用程序中遇到了日期格式问题。

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

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

如果我输入 01/03/2010,则输入为 2010 年 1 月 3 日

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

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

【问题讨论】:

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


    【解决方案1】:

    Rails 的 DateTime 尝试自动检测格式。它将检测以下格式:mm/dd/yydd-mm-yyyyyy-mm-ddyyyy/mm/dd。您可以对 DateTime.parse 进行猴子补丁,但我宁愿将此问题移至应用程序的 View

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

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

    【讨论】:

    • 嗯.. 是的,我可以更改视图中的格式。我希望不要。令我惊讶的是 ActiveRecord 不能像这样本地化..
    【解决方案2】:

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

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

    重启服务器,一切顺利。

    【讨论】:

    • 我无法让它工作。我有一个为我创建的 new_rails_defaults.rb 文件。把它放在这里是行不通的。创建 rails_defaults.rb 也不起作用。还有什么我可能错过的吗?
    • 是的,重启机器只是为了确保!
    • 这是否依赖于特定的 Rails 版本?我在 2.3.4
    • 哦不,我不是...我在 2.3.5。
    • 我的解决方案无法正常工作。您需要覆盖 String 类的 to_time、to_date 和 to_datetime 方法才能使其工作。
    【解决方案3】:
    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
    

    【讨论】:

      猜你喜欢
      • 2015-03-07
      • 2011-02-26
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 2010-11-03
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多