3

我有一个日期类型的 Mongoid 字段。我在搜索针对该特定字段的文档时遇到了各种麻烦。我以这种格式接收日期作为字符串:10/20/2013. 我认为类似Date.parse("10/20/2013")"10/20/2013".to_date足以让我做类似的事情,MyModel.find_by(datefield: date_result)但这给了我大量的 ArgumentError 超出范围类型的问题。

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

4

3 回答 3

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)>
于 2013-11-05T19:19:26.227 回答
4

您可以使用strptime

Date.strptime('10/20/2013', '%m/%d/%Y')
=> <Date: 2013-10-20 ((2456586j,0s,0n),+0s,2299161j)>

阅读可能的格式列表

于 2013-11-05T19:01:57.223 回答
0
Date.parse("10/20/2013")
=> ArgumentError: invalid date

Date.parse("20/10/2013")
=> Sun, 20 Oct 2013
于 2013-11-05T19:01:42.413 回答