Ruby 仅返回 2 天前之前的日期 - 2:Integer 的未定义方法“days”

mr_*_*cle 1 ruby

我在下面排列我只想获取早于 2.days.ago 的日期

data = ["2020-02-21T07:52:14.114+0100",
 "2020-02-19T13:20:50.539+0100",
 "2020-02-11T12:36:16.565+0100",
 "2020-02-17T20:06:53.312+0100",
 "2020-02-04T09:42:30.754+0100",
 "2020-01-29T13:46:16.033+0100",
 "2020-02-18T11:15:12.894+0100"]
Run Code Online (Sandbox Code Playgroud)

我试图用下面的代码来做到这一点:

data.select { |data| data if DateTime.parse(data) > 2.days.ago }

但我收到一个错误:

NoMethodError: 2:Integer 的未定义方法“天”

spi*_*ann 6

正如其他人在评论中已经指出的那样,n.days.ago它不是普通 Ruby 的一部分,而是随 Ruby on Rails 一起引入的(请参阅有关days和 的文档ago)。

普通 Ruby 中的等价物n.day.ago可能是这样的:

 Time.now - n * 24 * 60 * 60
Run Code Online (Sandbox Code Playgroud)

这意味着当您想要选择超过 2 天的日期时,您可以像这样编写示例:

 two_days_ago = Time.now - 2 * 24 * 60 * 60
 data.select { |data| Time.parse(data) < two_days_ago }
Run Code Online (Sandbox Code Playgroud)

date if请注意,块中不需要该部件select

  • 或者,也许在这种情况下使用“Date”类是有效的?它可以与“DateTime”实例进行比较,“Date.today - 2”看起来更好。 (2认同)