两个日期之间的确切差异,以天和小时为单位

时间:2013-07-16 14:22:31

标签: ruby-on-rails ruby time

我希望在Thu Jul 18 11:30:00 +0000 2013Sat Jul 20 10:30:00 +0000 2013之间的两个日期之间获得几天和几小时的确切时间。有1 day and 23 hours的差异。 Rails的ActionView模块包括两个方法

(1) distance_of_time_in_words
(2) distance_of_time_in_words_to_now

但他们返回的结果就像1天或2天我也需要几个小时。

4 个答案:

答案 0 :(得分:7)

如果您不想使用任何宝石,那么您只需进行以下计算即可获得分钟和秒的精确差异 -

t1 = Time.now #date1
t2 = (Time.now - 10.hours) #date2

seconds = (t1.to_i - t2.to_i)
days = seconds / 86400;
hours = seconds / 3600;
minutes = (seconds - (hours * 3600)) / 60;
seconds = (seconds - (hours * 3600) - (minutes * 60));

答案 1 :(得分:6)

插件dotiw可能对解决此问题很有帮助。

dotiw是Rails的插件,它会覆盖默认的distance_of_time_in_words并提供更准确的输出。

答案 2 :(得分:4)

有一个宝石:time_diff

https://rubygems.org/gems/time_diff

它将显示时差,您甚至可以格式化输出。例如:

'%y, %M, %w, %d and %h:%m:%s'将返回:'1 year, 2 months, 3 weeks, 4 days and 12:05:52'

语法也非常简单:

> Time.diff(Time.parse('2010-03-06 12:30:00'), Time.parse('2011-03-07 12:30:30'), '%y, %d and %h:%m:%s')
=> {:year => 1, :month => 0, :week => 0, :day => 0, :hour => 18, :minute => 0, :second => 30, :diff => '1 year and 18:00:30'}

你应该能够从中得到你需要的东西。

快乐的编码!

答案 3 :(得分:1)

date_1 = DateTime.parse("Thu Jul 18 11:30:00 +0000 2013")
date_2 = DateTime.parse("Sat Jul 20 10:30:00 +0000 2013")

difference_in_hours =  (date_2.to_time - date_1.to_time) / 60 / 60