我有一个类型为Date的Mongoid字段。我在搜索针对这个特定领域的文档时遇到了各种各样的麻烦。我以这种格式收到日期字符串:10/20/2013
。我认为像Date.parse("10/20/2013")
或"10/20/2013".to_date
这样的东西足以让我做MyModel.find_by(datefield: date_result)
之类的事情但是这给了我大量的ArgumentError超出范围类型的问题。
将“10/20/2013”转换为可用于查询数据库的简单Date
对象的最简单方法是什么?
答案 0 :(得分:5)
你明白了:
Date.parse("10/20/2013")
ArgumentError: invalid date
问题是10/20
。 Ruby是一种国际语言,值10
和20
有些含糊不清。在美国,“标准”日期格式为“MMDDYYYY”,或日期解析条款中的%m%d%Y
。世界上大多数人使用不同的标准,“DDMMYYYY”或%d%m%Y
。 Ruby使用第二种格式,第一天就是。
看看差异,很容易看出为什么Date.parse
会被混淆和抱怨。 10
是一个明智的日子,但是20
只是一个月的废话,所以Ruby拒绝它。
您可以通过强制用于解析的模式来解决此问题:
Date.strptime('10/20/2013', '%m/%d/%Y')
# => #<Date: 2013-10-20 ((2456586j,0s,0n),+0s,2299161j)>
答案 1 :(得分:4)
您可以使用strptime
:
Date.strptime('10/20/2013', '%m/%d/%Y')
=> <Date: 2013-10-20 ((2456586j,0s,0n),+0s,2299161j)>
阅读this可能的格式列表
答案 2 :(得分:0)
Date.parse("10/20/2013")
=> ArgumentError: invalid date
到
Date.parse("20/10/2013")
=> Sun, 20 Oct 2013