时差(小时)


69

我试图得到两个不同的时间实例的小时数差异。我从数据库获取这些值作为:datetime列

如何做到这一点,以便在忽略或舍入分钟的同时,在计算中也包括月份和年份?只能手动完成此操作,还是可以执行此功能?

Answers:


137
((date_2 - date_1) / 3600).round

要么

((date_2 - date_1) / 1.hour).round

9
这对我不起作用。也许自2009年以来发生了变化?现在,我必须做些(date_2 - date_1) * 24时间
Jeff

1
在Rails 4.2上对我来说完全正常。
陌生人研究员2015年

@杰夫,对不起,我不太懂英语。您是在讽刺吗,答案是否正确?
David Mauricio

第二个答案不适用于Ruby2.4.x。考虑使用第一个选项
Silverfall05年

这两个选项都可以在Ruby 2.4.x和Rails 4或5中使用,只要对象是TimeActiveSupport::TimeWithZone(通常从datetime数据库列中获取)的实例即可。另一方面,对于Date或的实例,Datetime您需要乘以24才能达到相同的效果,因为内部单位是天,而不是秒。
罗慕洛Ceccon


12

这很好用,例如自用户创建帐户以来的小时数

(Time.parse(DateTime.now.to_s) - Time.parse(current_user.created_at.to_s))/3600


4

您可以使用Rails的方法 distance_of_time_in_words

distance_of_time_in_words(starting_time, ending_time, options = {include_seconds: true })

请记住,这是近似值。例如,distance_of_time_in_words_to_now(DateTime.now - 36.hours)将返回1 day
Redithion


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.