以相反的顺序获得最后14天

时间:2013-09-27 13:00:40

标签: ruby-on-rails ruby

我想在视图中打印过去14天的每一天的统计数据。

为此,我的目标是创建一系列日期,从今天开始到第14天结束(回到过去),在视图中迭代.each

most_recent   = Date.current
least_recent  = Date.current.ago(14.days)

这不起作用:

most_recent..least_recent.each

这似乎不起作用:

(most_recent).downto(least_recent).each

任何想法如何实现这一目标?

5 个答案:

答案 0 :(得分:8)

我使用Numeric#ago

14.downto(0) do |i|
  date = i.days.ago
end

您的尝试无效,因为most_recent大于least_recent(我在这里使用整数,但日期相同):

(0..-14).to_a      #=> []
-14.downto(0).to_a #=> []

这些方法仅适用于“从低到高”:

(-14..0).to_a      #=> [-14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0]
0.downto(-14).to_a #=> [-14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0]

答案 1 :(得分:5)

这是如何使用Date#downto的?

require 'date'

dt = Date.today
dt.downto(dt-5){|d| puts d }

输出:

2013-09-27
2013-09-26
2013-09-25
2013-09-24
2013-09-23
2013-09-22

答案 2 :(得分:4)

试试这个:

14.times do |i|
  date = Date.today-i
  #do stuff with date
end

答案 3 :(得分:3)

还有step method;踩着-1可以追溯到时间。

require 'date'
most_recent = Date.today
least_recent = most_recent - 14
most_recent.step(least_recent, -1){|d| puts d}
#=> 2013-09-27
#=> 2013-09-26
#=> 2013-09-25
#=> 2013-09-24
#=> 2013-09-23 
#=> ...

答案 4 :(得分:0)

((Date.today - 14)...(Date.today)).reverse_each do |d|
  # YOUR CODE GOES HERE.. puts d
end