3

我想打印视图中过去 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

任何想法如何做到这一点?

4

5 回答 5

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]
于 2013-09-27T13:19:52.050 回答
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
于 2013-09-27T13:21:04.513 回答
4

尝试这个:

14.times do |i|
  date = Date.today-i
  #do stuff with date
end
于 2013-09-27T13:09:25.433 回答
3

还有step方法;与 -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 
#=> ...
于 2013-09-27T13:28:55.547 回答
0
((Date.today - 14)...(Date.today)).reverse_each do |d|
  # YOUR CODE GOES HERE.. puts d
end
于 2013-09-27T13:23:13.237 回答