Ruby on Rails获取start_at和end_at之间的间隔值

时间:2016-05-24 16:06:06

标签: ruby-on-rails ruby loops time each

我对Rails应用程序中的增量处理时间有疑问。

我有一个包含这些列的Schedule模型:

:user_id => 1,
:day => “Sunday”,
:start_at => “08:00AM”,
:end_at => “03:30PM”,
:average_time => “30” # this average time in minutes 

我需要以30分钟为增量从start_at循环到end_at,如下所示:

08:00 AM

08:30 AM

09:00 AM

09:30 AM

10:00 AM

…

…

03:30 PM

如何像这样逐步处理时间差异?

2 个答案:

答案 0 :(得分:1)

将所有内容转换为秒,解析时间并将“平均值”乘以60.然后简单地从start_time到end_time循环递增平均值。转换回时间并打印或做任何你想做的事情。

通常,您需要将所有内容转换为等于才能使用它。如果那是秒或分钟,那么一切都应该有效。秒可以很容易地处理时间对象。

答案 1 :(得分:1)

您可以使用step作为范围循环来执行此操作。以下是您的模型的示例:

total_minutes = (schedule.end_at - schedule.start_at) / 60

(0..total_minutes).step(30) do |minutes|
  time = schedule.start_at + minutes*60
  puts "#{time.strftime('%H:%M')}"
end

首先根据total_minutesstart_at次之间的差异计算end_at,将秒数转换为分钟。这假设这些是Ruby Time对象而不是字符串;在使用此代码之前,需要将字符串转换为时间。

接下来,通过将每个循环迭代(* 60)的分钟数添加到start_at,循环从start_at以30分钟为增量进行。在每个间隔,循环打印时间,直到达到或超过end_at