如何在 rails 中获取两个日期时间字段的时差(以分钟为单位)?

how to get time difference in minutes in rails for two date time fields?

我想计算两个 date_time fields.like created_at 和 updated_at 类型字段之间的时间差(以分钟为单位)。我想要这样的结果 updated_at - created_at = some minutes.

这些时间位于印度时区。我怎样才能在 rails 中做到这一点?

created = article.created_at
updated = article.updated_at

minutes = updated - created

由于 created_atupdated_at 属于 DateTime 类型,这应该有效。

created = article.created_at
updated = article.updated_at
minutes = ((updated - created) * 24 * 60).to_i

解释:

减去两个 DateTimes returns the elapsed time in days。在下面的示例中,e-d 将 return (28807336643183/28800000000000)。因此,要将其转换为 分钟 ,我们需要 乘以 24*60(因为一天有 24 小时,每小时有 60分钟)

示例(已测试):

d = DateTime.now
 => Tue, 13 Jun 2017 10:21:59 +0530 
2.3.3 :003 > e = DateTime.now + 1.day
 => Wed, 14 Jun 2017 10:22:21 +0530
g = ((e-d) * 24 * 60).to_i
 => 1440

此解决方案适用于对 created_atupdated_at 使用 TimeWithZone 类 的 ActiveRecord 模型。

created = article.created_at
updated = article.updated_at

minutes = (updated - created) / 1.minutes

这就是我使用的,它只为您处理天数或分钟数,并为您提供差异 time_ago_in_words 只需传递日期时间、日期或时间对象,它将 return人类可读的差异。 time_ago_in_words(@post.created_at)

查看助手 time_ago_in_words,我们可以说:

    from_time = from_time.to_time if from_time.respond_to?(:to_time)
    to_time = to_time.to_time if to_time.respond_to?(:to_time)
    #absolute distance:
    from_time, to_time = to_time, from_time if from_time > to_time
    distance_in_minutes = ((to_time - from_time)/60.0).round