Ruby仅返回早于2天的日期-未定义方法'days'for 2:Integer

问题描述 投票:0回答:1

我在下面的数组仅想获取比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"]

我正在尝试使用下面的代码来做到这一点:

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

但是我遇到错误:

NoMethodError:2:整数的未定义方法'days'

ruby
1个回答
1
投票

正如其他人在评论中已经指出的那样,n.day.ago不是纯Ruby的一部分,而是在Ruby on Rails中引入的。

在普通的Ruby中,您可以使用如下代码:

 Time.parse("2020-02-19T13:20:50.539+0100") > Time.now - 2 * 24 * 60 * 60
 #=> 2020-02-17 13:20:50.539 +0100

您可能希望将数字存储在变量中,以使其更具可读性:

 TWO_DAYS = 2 * 24 * 60 * 60

 Time.parse("2020-02-19T13:20:50.539+0100") > Time.now - TWO_DAYS
 #=> 2020-02-17 13:20:50.539 +0100

这意味着您可以这样编写示例(请注意,date if块中不需要select):

 TWO_DAYS_AGO = Time.now - 2 * 24 * 60 * 60
 data.select { |data| Time.parse(data) > TWO_DAYS_AGO }
© www.soinside.com 2019 - 2024. All rights reserved.