我在 Rails 应用程序中遇到了日期格式问题。
我在我们的视图中有一个日期字段,我想将其格式化为dd/mm/yy。这是用户期望输入日期的方式,并且 datepicker 控件使用这种格式。
但是,Active Record 似乎期待mm/dd/yy。
如果我输入01/03/2010,则输入为03 January 2010。
如果我输入25/03/2010,这将被放入null。
如何让 ActiveRecord 期待 Her Majesties 日期格式?
我在 Rails 应用程序中遇到了日期格式问题。
我在我们的视图中有一个日期字段,我想将其格式化为dd/mm/yy。这是用户期望输入日期的方式,并且 datepicker 控件使用这种格式。
但是,Active Record 似乎期待mm/dd/yy。
如果我输入01/03/2010,则输入为03 January 2010。
如果我输入25/03/2010,这将被放入null。
如何让 ActiveRecord 期待 Her Majesties 日期格式?
Rails 的 DateTime 尝试自动检测格式。它将检测以下格式:mm/dd/yy
或dd-mm-yy
或yyyy-mm-dd
或yyyy/mm/dd
。您可以使用 monkey-patch DateTime.parse
,但我宁愿将此问题转移到您的应用程序的视图中。
我总是建议yyyy-mm-dd [hh:mm:ss]
用作日期的字符串表示形式。如果 DatePicker 支持多种日期格式,请检查它的文档。
例如,jQuery 日期选择器包含dateFormat
(对于发送到服务器的数据,将其设置为yyyy-mm-dd
)以及altFormat
(对于用户看到的输入,将其设置为dd/mm/yyyy
)。
添加一个名为目录rails_defaults.rb
的文件config\initializers
;有以下几行:
Date::DATE_FORMATS[:default] = '%d/%m/%Y'
Time::DATE_FORMATS[:default]= '%d/%m/%Y %H:%M:%S'
重新启动服务器,一切顺利。
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