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



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

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

: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

如何像这样增量处理时间之间的差异?

您可以使用范围循环的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

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

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

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

通常,您需要将所有内容转换为相等才能对其进行处理。如果是几秒钟或几分钟,一切都应该工作。秒使处理时间对象变得容易。