Ruby on rails Ruby字符串到日期对象
我有一个日期类型的Mongoid字段。我在搜索这个特定领域的文档时遇到了各种各样的麻烦。我以字符串形式接收日期: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
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)>