我希望在Thu Jul 18 11:30:00 +0000 2013
和Sat 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天我也需要几个小时。
答案 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