如何获取两个日期时间字段的轨道分钟时差?
Posted
技术标签:
【中文标题】如何获取两个日期时间字段的轨道分钟时差?【英文标题】:how to get time difference in minutes in rails for two date time fields? 【发布时间】:2015-09-06 07:41:34 【问题描述】:我想计算两个 date_time 字段之间的时间差(以分钟为单位)。比如 created_at 和 updated_at 类型的字段。我想要这样的结果updated_at - created_at = some minutes.
这些时间以印度的时区为准。我如何在 Rails 中做到这一点?
created = article.created_at
updated = article.updated_at
minutes = updated - created
【问题讨论】:
你能在这里清除一些东西吗?date_time
字段的真正含义是什么?数据类型DateTime
的字段?
【参考方案1】:
看着助手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
【讨论】:
【参考方案2】:此解决方案适用于使用 created_at
和 updated_at
的 TimeWithZone
类的 ActiveRecord 模型。
created = article.created_at
updated = article.updated_at
minutes = (updated - created) / 1.minutes
【讨论】:
如果created_at
/updated_at
是Time
的实例,这将起作用。正如帕万的回答所声称的那样,他们不是。我想知道,它是否取决于应用程序设置或 Rails 版本或其他什么?【参考方案3】:
由于created_at
和updated_at
是DateTime
类型,这应该可以工作。
created = article.created_at
updated = article.updated_at
minutes = ((updated - created) * 24 * 60).to_i
解释:
减去两个日期时间返回 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
【讨论】:
抱歉,这是如何工作的?updated - created
会给你一个以秒为单位的时差,应该除以 60 给你分钟。我不知道你为什么要把这些秒数乘以一天中的分钟数......
这个答案不正确。我已经把正确答案below
@pavan 我先查询了一下,没有回复。您非常机敏地注意到 created_at 和 updated_at 违反了 Rails 的约定并使用 Datetime 字段而不是标准时间戳。向你致敬!考虑到许多人已经提出了确切的查询并按照惯例提供了解决方案,我认为这值得一些额外的解释。再次感谢您在细节中发现了魔鬼。
@pavan 哈哈,永远不是朋友!我最初的查询是黑暗中的回声:P 您能否为像 Doug 和我这样被彻底搞糊涂的其他人添加一些关于时间戳与日期时间的澄清?我已经删除了我的答案。
@pavan 这个问题不是说DateTime
,而是说date_time
,这不是一个真实的东西。它还说date time
这也不是一回事。大多数从 Google 提出这个问题的人都会提到带有 TimeWithZone
的 ActiveRecord 模型(这就是我发现它的方式),在这种情况下你的答案是不正确的。我假设 OP 的意思是 Article 是 ActiveRecord 模型,created_at
和 updated_at
是默认的 TimeWithZone
,而不是 DateTime
OP 还说时间在印度的时区。 DateTime
不包含该信息。【参考方案4】:
这是我使用的,它只为您处理几天或分钟,并为您提供差异time_ago_in_words
只需传递一个日期时间、日期或时间对象,它将返回人类可读的差异。 time_ago_in_words(@post.created_at)
【讨论】:
拒绝投票。该问题要求在几分钟内得到结果,而不是字符串。以上是关于如何获取两个日期时间字段的轨道分钟时差?的主要内容,如果未能解决你的问题,请参考以下文章