ruby-on-rails 如何在两个日期时间字段中获得以分钟为单位的时间差?

p1tboqfb  于 2023-05-19  发布在  Ruby
关注(0)|答案(5)|浏览(223)

我想计算两个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
cyej8jka

cyej8jka1#

此解决方案适用于使用created_atupdated_atTimeWithZone类的ActiveRecord模型。

created = article.created_at
updated = article.updated_at

minutes = (updated - created) / 1.minutes
kupeojn6

kupeojn62#

由于created_atupdated_at的类型为DateTime,因此应该可以工作。

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

说明:

减去两个DateTimes返回 the elapsed time in days。在下面的例子中,e-d将返回(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
q9rjltbz

q9rjltbz3#

看一下helper 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
kpbwa7wx

kpbwa7wx4#

ActiveRecord的列created_atupdated_at的数据类型是ActiveSupport::TimeWithZone。如果要用DateTime进行操作,则需要先进行转换

now = DateTime.now
creation_time = user.created_at.to_datetime        
diff_in_minutes = ((now - creation_time) * 24 * 60).to_i

您可以在Rails控制台中轻松地对此进行测试,但是为了更容易测试,您可以将其转换为秒

diff_in_seconds = ((now - creation_time) * 24 * 60 * 60).to_i
pieyvz9o

pieyvz9o5#

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

相关问题