Ruby on rails Ruby字符串到日期对象

Ruby on rails Ruby字符串到日期对象,ruby-on-rails,ruby,mongodb,date,Ruby On Rails,Ruby,Mongodb,Date,我有一个日期类型的Mongoid字段。我在搜索这个特定领域的文档时遇到了各种各样的麻烦。我以字符串形式接收日期:10/20/2013。我认为类似于Date.parse(“10/20/2013”)或“10/20/2013”之类的东西可以让我做类似于MyModel.find\u by(datefield:Date\u result)的事情,但这给了我大量的参数错误超出范围类型的问题 将“10/20/2013”转换为一个简单的Date对象以用于查询数据库,最简单的方法是什么 Date.parse("1

我有一个日期类型的Mongoid字段。我在搜索这个特定领域的文档时遇到了各种各样的麻烦。我以字符串形式接收日期:
10/20/2013
。我认为类似于
Date.parse(“10/20/2013”)
“10/20/2013”之类的东西可以让我做类似于
MyModel.find\u by(datefield:Date\u result)
的事情,但这给了我大量的参数错误超出范围类型的问题

将“10/20/2013”转换为一个简单的
Date
对象以用于查询数据库,最简单的方法是什么

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

您可以使用:

Date.strtime('10/20/2013','%m/%d/%Y')
=> 
阅读可能的格式列表

您会发现:

Date.parse("10/20/2013")
ArgumentError: invalid date
问题是
10/20
。Ruby是一种国际语言,其值
10
20
有些含糊不清。在美国,“标准”日期格式是“mmddyyy”,或日期解析术语中的
%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)>
Date.strtime('10/20/2013','%m/%d/%Y')
# => #

您尝试过DateTime.Parse()吗?如果您同意使用DateTime而不是Date…
DateTime.parse('10/20/2013')#=>ArgumentError:invalid Date
这是一个很好的答案。这是我多年前遇到的问题。谢谢
Date.parse("10/20/2013")
ArgumentError: invalid date
Date.strptime('10/20/2013', '%m/%d/%Y')
# => #<Date: 2013-10-20 ((2456586j,0s,0n),+0s,2299161j)>