在我的控制器中,我有这样的陈述:
@termine = @current_department.termins.where(date: Date.strptime(params[:date], '%d-%m-%Y')).to_json
我将日期29-11-2013
转换为2013-11-29
:
Date.strptime(params[:date], '%d-%m-%Y'))
然后我尝试将2013-11-29
作为params[:date]
传递,但我收到错误:
invalid date
如何查看日期的格式?
答案 0 :(得分:2)
假设您不会在公元100年之前处理多年,您只需检查字符串的第二个和第三个字符是否都是数字。
这足以区分这两种格式。您必须检查第二个和第三个字符,以防日期可能是一个数字,但如果它们都是数字(不是-
),则必须是YYYY-*
变体。
答案 1 :(得分:1)
使用begin .. rescue ..
:
date_str = '2013-11-29'
begin
d = Date.strptime(date_str, '%d-%m-%Y')
rescue ArgumentError
d = Date.strptime(date_str, '%Y-%m-%d')
end
d # => #<Date: 2013-11-29 ((2456626j,0s,0n),+0s,2299161j)>
答案 2 :(得分:1)
您还可以使用正则表达式模式。
(\d{4})-(\d{2})-(\d{2})
会给你YYYY-MM-DD
(\d{2})-(\d{2})-(\d{4})
会给你DD-MM-YYYY
编辑:应该注意,这将捕获DD和MM,无论顺序如何,所以你要验证组是&gt;或者&lt; 12。
答案 3 :(得分:0)
您显然正在尝试匹配数据库的日期格式。你不需要。
取出strptime
,只需在Rails上以任何格式抛出日期,Time.parse
将在内部弄明白。