Ruby字符串到Date对象

时间:2013-11-05 18:58:38

标签: ruby-on-rails ruby mongodb date

我有一个类型为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对象的最简单方法是什么?

3 个答案:

答案 0 :(得分:5)

你明白了:

Date.parse("10/20/2013")
ArgumentError: invalid date

问题是10/20。 Ruby是一种国际语言,值1020有些含糊不清。在美国,“标准”日期格式为“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