更改Rails 3中日期输入的格式?

时间:2011-06-04 16:16:48

标签: ruby-on-rails ruby ruby-on-rails-3

我在Rails 3中使用text_field日期输入,并希望将日期格式化为mm/dd/yyyy

虽然我已经找到了一些以这种方式显示日期的解决方案,但我还没有遇到一种可行的方法来接受该格式作为输入。

问题在于,如"09/05/2011"这样的模糊日期,Rails会将其解释为“5月9日”而不是“9月5日”。

让Rails 3根据mm/dd/yyyy格式解释这些输入的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

希望您的目标受众仅为美国人,因为该日期格式并未在美国以外的许多地方使用过。

无论如何,您只想验证字符串的格式:

validates_format_of :the_date, :with => /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/

这是一个非常基本的模式,用于验证字符串的格式,但不验证分隔符之间的实际值。如果你想这样做,最好的办法可能只是尝试用Date#strptime解析日期,看看它是否解析。

答案 1 :(得分:1)

我遇到了一个问题,用户填写了一个月/日/年的文本字段。但是由于新的Date解析,Rails承认他们输入了日/月/年。我通过在Rails中修补Date._parse来解决它。因此我在initializers文件夹中添加了date_patch.rb。

require 'time'

class Date
  class << self
    alias :org_parse :_parse

    # switch the month and day field for expecting US dates
    def _parse(str, comp=true)
      str = str.sub(/(\d{1,2})\/(\d{1,2})\/(\d{1,4})/, '\2/\1/\3')
      org_parse str, comp
    end
  end
end