Ruby:如何对Time对象的数组求和?

时间:2017-02-06 15:16:07

标签: ruby ruby-on-rails-4

我有一个带有持续时间属性的CardioExercise模型(Ruby 2.2.4时间数据类型)。我需要写一种方法来计算一个成员在过去一周内的有氧运动总持续时间。

这是我到目前为止所得到的:

 def minutes_cardio_exercise_last_week
    array = @user.member.cardio_exercises.between_times(1.week.ago.beginning_of_week,            1.week.ago.end_of_week).map { |d| d[:duration] }
    hour, min, sec = ??
    (hour * 60 + min + sec / 60).round
 end

在Rails控制台中,数组包含:

=> [2000-01-01 00:25:00 UTC, 2000-01-01 00:30:00 UTC, 2000-01-01 00:53:20 UTC]

这些是我期待的时间对象,但我无法弄清楚如何总结这些值,以便上周获得108分钟的有氧运动?

在我的研究期间,我发现了两篇使用PHP解决问题的帖子。第三篇文章是Ruby,但我无法弄清楚如何根据我的目的调整解决方案     How to Sum Time Value in Array |     How to sum time in array? |     Ruby: Average array of times

我感谢任何帮助和见解。

1 个答案:

答案 0 :(得分:2)

array.inject(0) { |sum, t| sum + ((t.hour * 60 + t.min + t.sec / 60).round) }

甚至更好,如果你有功能得到分钟。

def minutes(t)
     (t.hour * 60 + t.min + t.sec / 60).round
end

def minutes_cardio_exercise_last_week
   array = @user.member.cardio_exercises.between_times(1.week.ago.beginning_of_week,            1.week.ago.end_of_week).map { |d| d[:duration] }
   array.inject(0) { |sum, t| sum + minutes(t) } 
end