Ruby on Rails 获取 start_at 和 end_at 之间的间隔值
Ruby on Rails get interval values between start_at and end_at
我对 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
如何像这样逐步处理时间之间的差异?
将所有内容转换为秒,解析时间并将 "average" 乘以 60。然后简单地执行从 start_time 到 end_time 的循环,按平均值递增。转换回时间并打印或做任何你想做的事。
通常,您需要将所有内容都转换为等式才能对其进行处理。如果那是几秒钟或几分钟,一切都应该有效。 Seconds 使处理时间对象变得容易。
您可以使用范围循环的 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_at
和 end_at
时间之差计算 total_minutes
,将秒转换为分钟。这假设这些是 Ruby 时间对象而不是字符串;在使用此代码之前,需要将字符串转换为时间。
接下来,通过将每次循环迭代 (* 60) 的分钟数添加到 start_at
,循环从 start_at
开始以 30 分钟为增量进行。在每个间隔,循环打印时间,直到达到或超过 end_at
.
我对 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
如何像这样逐步处理时间之间的差异?
将所有内容转换为秒,解析时间并将 "average" 乘以 60。然后简单地执行从 start_time 到 end_time 的循环,按平均值递增。转换回时间并打印或做任何你想做的事。
通常,您需要将所有内容都转换为等式才能对其进行处理。如果那是几秒钟或几分钟,一切都应该有效。 Seconds 使处理时间对象变得容易。
您可以使用范围循环的 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_at
和 end_at
时间之差计算 total_minutes
,将秒转换为分钟。这假设这些是 Ruby 时间对象而不是字符串;在使用此代码之前,需要将字符串转换为时间。
接下来,通过将每次循环迭代 (* 60) 的分钟数添加到 start_at
,循环从 start_at
开始以 30 分钟为增量进行。在每个间隔,循环打印时间,直到达到或超过 end_at
.