平均一天的时间?

时间:2014-04-21 05:25:30

标签: ruby time average

我正在编写一个Rails应用程序,允许用户输入他们完成任务的时间。

我将时间存储为Time个对象,我需要一种方法来获取用户完成任务的平均时间。

我该如何做到这一点?

我尝试使用МалъСкрылевъ的答案

@deliveries = Delivery.all


times = Array.new
@deliveries.each do |d|
  times.push(d.time)
end
puts times # gives me [2000-01-01 06:15:00 UTC, 2000-01-01 07:18:00 UTC]
unless times.empty?
  @avg = Time.at(times.map(&:to_i).reduce(:+) / times.size)
end
puts @avg #gives me 1999-12-31 23:46:30 -0700

2 个答案:

答案 0 :(得分:2)

您可以在表示为Time的{​​{1}}对象上使用数学方程和语句:

Integer

实施例

对于特定时间数组也是如此:

  1. 首先:

    times = [ Time.now, Time.now ]
    Time.at(times.map(&:to_i).reduce(:+) / times.size)
    
  2. 第二

    times = ["2000-01-01 08:13:00 UTC", "2000-01-01 18:14:00 UTC", "2000-01-01 16:55:00 UTC", "2000-01-01 23:53:00 UTC", "2000-01-01 00:56:00 UTC", "2000-01-01 02:57:00 UTC", "2000-01-01 00:01:00 UTC"].map {|t| Time.parse(t) }
    Time.at(times.map(&:to_i).reduce(:+) / times.size)
    # => 2000-01-01 13:09:51 +0300
    

答案 1 :(得分:2)

您可以按时间对象计算平均值(它们可以在不同的日期)。这样的事情应该有效。

deliveries_at = @deliveries.map { |d| d.time.hour * 3600 + d.time.min * 60 + t.sec }
avg = deliveries_at.inject(:+) / deliveries_at.count
avg_hour = avg / 3600
avg_minute = (avg % 3600) / 60
avg_second = avg % 60

第一行从每次交付的每天开始收集秒数。第二行计算平均值(以秒为单位),最后三行计算为小时/分钟/秒。