我在Rails3中使用text_field
作为日期输入,并希望将日期格式化为mm/dd/yyyy
。
虽然我已经找到了一些以这种方式显示日期的解决方案,但我还没有找到一种可行的方法来接受这种格式作为输入。
问题是,在像"09/05/2011"
这样日期不明确的情况下,Rails将其解释为"5月9日",而不是"9月5日"
让Rails3根据mm/dd/yyyy
格式解释这些类型的输入的最佳方法是什么?
希望你的目标受众只是美国人,因为这种日期格式在美国以外的很多地方都不使用。
无论如何,您只想验证字符串的格式:
validates_format_of :the_date, :with => /^[0-9]{2}/[0-9]{2}/[0-9]{4}$/
这是一个非常基本的模式,它验证字符串的格式,但不验证分隔符之间的实际值。如果你想这样做,你最好的办法可能只是尝试用Date#strptime
解析日期,看看它是否解析。
我遇到一个问题,用户在文本字段中填写月/日/年。但由于新的Date解析,Rails承认他们输入了天/月/年。我通过修补Date解决了这个问题_在Rails中解析。因此,我在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