我在Rails 3中使用text_field
日期输入,并希望将日期格式化为mm/dd/yyyy
。
虽然我已经找到了一些以这种方式显示日期的解决方案,但我还没有遇到一种可行的方法来接受该格式作为输入。
问题在于,如"09/05/2011"
这样的模糊日期,Rails会将其解释为“5月9日”而不是“9月5日”。
让Rails 3根据mm/dd/yyyy
格式解释这些输入的最佳方法是什么?
答案 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