在Ruby中迭代了几天

时间:2011-07-07 18:29:32

标签: ruby ruby-on-rails-3

我尝试了以下内容:

def next_seven_days
  today = Date.today
  (today .. today + 7).each { |date| puts date } 
end 

但这只是给了我第一个和最后一个日期。我无法弄清楚如何在两者之间获得所有这些。

我试图按照这里的示例:http://www.whynotwiki.com/Ruby_/_Dates_and_times

5 个答案:

答案 0 :(得分:10)

我想你想要更像这样的东西:

def next_seven_days
  today = Date.today
  (today .. today + 7).inject { |init, date|  "#{init} #{date}" } 
end

在这种情况下,返回值是一个包含所有日期的连接字符串。

或者,如果它不是您想要的连接字符串,您可以更改它的"#{init} #{date}"部分。

作为旁注,在轨道上的ruby中使用puts将不会打印到网页。使用<%= next_seven_days %>时,该函数的返回值将打印到页面。 each函数返回括号中的范围。

答案 1 :(得分:3)

您的代码肯定会打印到stdout的所有八天。您的问题是,您正在查看返回值(自each返回后self(today .. today + 7))。

请注意,如果在erb模板中打印到stdout,则不会导致输出显示在渲染模板中。

答案 2 :(得分:2)

您的函数返回2011-07-07..2011-07-14指定的枚举,该枚举显示在您的视图中,但您的put将打印到STDOUT,这不是您的视图,但控制台屏幕是您的服务器正在运行=)

如果您希望视图显示七天的列表,您需要实际创建执行该操作的字符串并返回:)

def next_seven_days
  outputstr = ""
  today = Date.today
  (today..(today+7.days)).each { |date| outputstr += date.to_s }
  return outputstr 
end 

答案 3 :(得分:1)

def next_seven_days
  today = Date.today
  (today..(today+7.days)).each { |date| puts date } 
end 

答案 4 :(得分:0)

使用“下一步”方法

        def next_seven_days
          today= Date.today
          7.times do 
             puts today
             today=today.next
           end
        end