Rails在两个日期之间有所不同

use*_*ser 6 ruby time datetime ruby-on-rails

如何获得时差 days,hours,mins

我想做

datetime_A - datetime_B
Run Code Online (Sandbox Code Playgroud)

datetime_A =星期六,2014年1月4日07:00:13 +0000

datetime_B =星期五,2014年1月3日01:09:46 +0000

它给我的回报是什么(35809/28800),bdw是什么意思?

我需要 1day,5h,23min

怎么办?

Dip*_*pta 13

您需要在rails应用程序中添加帮助程序以实现此目的.Ruby没有为此提供任何直接的方法.下面是使用ruby 2.1.0的日期操作.

2.1.0 :021 > a_date_time = DateTime.now
 => Fri, 26 Dec 2014 16:39:30 +0530 # First Date
2.1.0 :022 > b_date_time = DateTime.now-20
 => Sat, 06 Dec 2014 16:40:03 +0530 # Second Date
2.1.0 :023 > (a_date_time - b_date_time).to_i
 => 19 # Direct date difference
2.1.0 :024 > Seconds = ((a_date_time - b_date_time)*24*60*60).to_i
 => 1727966 # Seconds between two dates
2.1.0 :025 > sec = Seconds % 60
 => 26 # Second diffence to print
2.1.0 :026 > Minutes = Seconds / 60
 => 28799 # Minutes between two dates
2.1.0 :027 > min = Minutes % 60
 => 59 # Minute diffence to print
2.1.0 :028 > Hours = Minutes / 60
 => 479 # Hours between two dates
2.1.0 :029 > hour = Hours % 24
 => 23 #Hour diffence to print
2.1.0 :030 > Days = Hours / 24
 => 19 # Days between two dates
2.1.0 :032 > Days.to_s + 'Days, ' + hour.to_s + 'Hours, '+ min.to_s + 'Mins, ' + sec.to_s + 'Secs'
 => "19Days, 23Hours, 59Mins, 26Secs" # Desired output
Run Code Online (Sandbox Code Playgroud)


mli*_*elt 6

另一种方法是使用ActionView帮助程序distance_of_time_in_words(请参阅文档).如果通常不给出确切的次要单位,但是"约5天"之类的东西.


MZa*_*oza 5

我喜欢使用宝石 time_diff

https://github.com/abhidsm/time_diff

这是一个如何工作的例子

   Time.diff(Time.parse('2011-03-06'), Time.parse('2011-03-07'))
   # => {:year => 0, :month => 0, :week => 0, :day => 1, :hour => 0, :minute => 0, :second => 0, :diff => '1 day and 00:00:00'}
Run Code Online (Sandbox Code Playgroud)