加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 计算Ruby中日期时间之间的平均天数

发布时间:2020-12-17 02:40:15 所属栏目:百科 来源:网络整理
导读:我想在 Ruby中列出日期时间列表,然后计算它们之间的天数,然后平均这些日期.它是否正确?有没有更短的方法来做到这一点? dates = ["2012-08-05 00:00:00 UTC","2012-06-17 00:00:00 UTC","2012-06-15 00:00:00 UTC","2011-06-06 00:00:00 UTC"]difference =
我想在 Ruby中列出日期时间列表,然后计算它们之间的天数,然后平均这些日期.它是否正确?有没有更短的方法来做到这一点?

dates = ["2012-08-05 00:00:00 UTC","2012-06-17 00:00:00 UTC","2012-06-15 00:00:00 UTC","2011-06-06 00:00:00 UTC"]

difference = Array.new

dates.each_with_index do |date,index|
    if index != 0
        difference << date.to_date - dates[index - 1].to_date
    end
end

avg = difference.inject{ |sum,el| sum + el }.to_f / arr.size

那会以天数格式输出吗?

如果您愿意,我可以给我一个Rails版本,因为我将从模型字段中提取日期时间.

解决方法

我认为你有一个一个接一个的问题.如果您在日期中有n个值,那么您将在连续对之间存在n-1个差异,因此您的平均值应为:

avg = difference.inject{ |sum,el| sum + el }.to_f / (arr.size - 1)

而你的inject只是一个长篇大论的说法注入(:)所以你可以说:

avg = difference.inject(:+).to_f / (arr.size - 1)

无论如何,你可以使用mapeach_cons来使它更好一点:

dates.map(&:to_date).each_cons(2).map { |d1,d2| d1 - d2 }.inject(:+) / (dates.length - 1)

首先,我们可以使用map(& to_date)将所有内容转换为日期,而不是每次需要日期而不是字符串时转换.然后each_cons(2)以连续对的方式迭代数组(即[1,2,3,4]被迭代为[[1,2],[2,3],[3,4]]).然后是一个简单的映射来获取对之间的差异并注入(:)以将它们全部添加起来.

上面的内容将为您提供Rational,但如果您需要浮点或整数值,则可以使用to_f或to_i.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读