2011-06-04 48 views
0

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

虽然我发现显示日期这种方式的一些解决方案,但我没有运行一个可行的方法接受该格式作为输入。

问题在于,在模糊日期如"09/05/2011"的情况下,Rails将其解释为“5月9日”而非“9月5日”。

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

回答

3

希望你的目标受众是纯粹的美国人,因为那个日期格式在美国以外的地方并不多。

不管怎样,你只是想验证字符串的格式:

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

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

+0

感谢您的回答。不幸的是,我可能不清楚我在找什么。我编辑了我的问题,以澄清问题是关于Rails解释模糊日期的方式。 – 2011-06-04 17:38:51

+2

+1为答案。问题不在于Rails如何解释模糊的日期,而是存在模糊的日期。 Rails没有明确地确定用户位置的好方法,这是对日期格式的暗示。作为开发人员,您需要通过询问用户他们的首选日期格式或通过指定避开问题的独特格式来帮助您。人机界面的人会建议您避免使用文本框,并使用日历弹出窗口或界面来完全避免此问题。 – 2011-06-04 18:32:41

1

我遇到了一个问题,用户用月/日/年填写文本字段。但由于新的日期解析,Rails承认他们输入日/月/年。我通过在Rails中修补Date._parse来解决它。因此我在初始化文件夹中添加了一个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