Ruby 在 Rails - 日期时间范围问题

Ruby On Rails - Datetime Range issue

使用 API,我可以从网站检索订单列表。

在此列表中,我有每个订单的提交日期。

我需要过滤此列表以查找特定范围内的订单,但使用我的日期范围 "bad value for range"

这是 API 显示日期的方式:

"date_created"=>"2017-03-08T11:22:00"

这是我的代码

@lunedi = Date.today.at_beginning_of_week
@martedi = Date.today.at_beginning_of_week + 1
ele_ordini = woocommerce.get("orders").parsed_response
@ele_ordini = ele_ordini.select { |ordine| ordine['date_created'] == lunedi.to_datetime..martedi.to_datetime }

我的目标是过滤本周下的订单,仅在周一和周二

是的,在 23:59 之前,必须更改代码以填充整个星期二!!但我可以在之后做!

您尝试使用不适用于 select 方法的活动记录符号。像这样的东西应该有用。

@ele_ordini = ele_ordini.select do |ordine| 
  tmp = ordine['date_created'].to_datetime
  tmp >= lunedi.to_datetime && tmp <= martedi.to_datetime
end

如果您只关心比较日期(并且您正在使用 Rails - 看起来您就是这样),那么您可以稍微简化一下。例如:

@lunedi = Date.today.at_beginning_of_week
ele_ordini = woocommerce.get("orders").parsed_response
@ele_ordini = ele_ordini.select { |ordine| ordine['date_created'].to_date - @lunedi < 2 }

即您只查看每个日期和星期一之间的天数差异,然后选择 0(星期一)或 1(星期二)

添加变量时需要注明时间单位。试试这个

@lunedi = Date.today.at_beginning_of_week
@martedi = Date.today.at_beginning_of_week + 1.day
ele_ordini = woocommerce.get("orders").parsed_response
@ele_ordini = ele_ordini.select { |ordine| (lunedi..martedi).include? ordine['date_created'] }