Ruby on rails 在ruby中迭代时间

Ruby on rails 在ruby中迭代时间,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.1,我正在开发业务分析应用程序,在这个应用程序中,我需要获取特定月份每小时的数据。例如,我想获取2012年6月1日至2012年6月30日的数据,我需要获取这两天之间每小时的数据。 比如12:00 13:00,13:00-14:00……等等 我该怎么做呢。请让我知道。使用1.8.7平台。我认为已经有了答案。是的,步骤很好 a = Time.now b = Time.now + 3600*8 (a..b).step(3600){|t| puts t} 如果您使用的是Rails,则有一个日期方法步骤:

我正在开发业务分析应用程序,在这个应用程序中,我需要获取特定月份每小时的数据。例如,我想获取2012年6月1日至2012年6月30日的数据,我需要获取这两天之间每小时的数据。 比如12:00 13:00,13:00-14:00……等等


我该怎么做呢。请让我知道。使用1.8.7平台。

我认为已经有了答案。

是的,步骤很好

a = Time.now
b = Time.now + 3600*8
(a..b).step(3600){|t| puts t}

如果您使用的是Rails,则有一个日期方法
步骤


在纯ruby上,只需编写简单循环:

t=Time.new(2012,01,01,0,0,0) #start time
max_time=Time.new(2012,01,31,23,59,59) #end time
step=60*60 #1hour
while t<=max_time
     p t #your code here
     t += step
end
您还可以向下迭代:

t=Time.new(2012,01,31)
t.step(Time.new(2012,01,1),-3600) do |time|
   puts time
end
module TimeStep

  def step(limit, step)  # :yield: time
    t = self
    op = [:-,:<=,:>=][step<=>0]
    while t.__send__(op, limit)
       yield t
       t += step
    end
    self
  end
end

Time.send(:include, TimeStep) #include the extension
t=Time.new(2012,01,01,0,0,0)
t.step(Time.new(2012,01,31,23,59,59),3600) do |time|
  puts time
end
t=Time.new(2012,01,31)
t.step(Time.new(2012,01,1),-3600) do |time|
   puts time
end