【问题标题】:Rails get difference between two dates [duplicate]Rails得到两个日期之间的差异[重复]
【发布时间】:2015-02-23 16:43:24
【问题描述】:

如何获取days,hours,mins的时差

我正在努力

datetime_A - datetime_B

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

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

它返回给我类似(35809/28800),bdw 是什么意思?

我需要1day,5h,23min

怎么办?

【问题讨论】:

  • 给出日期值..
  • 如果它是重复的,为什么不提供答案的链接

标签: ruby-on-rails ruby datetime time


【解决方案1】:

给出的值是一个 Rational (http://www.ruby-doc.org/core-2.1.5/Rational.html)。它表示两个日期之间的天数。这实际上很酷,因为它比浮点数更准确,并且可以轻松转换为小时、分钟、秒等。

【讨论】:

    【解决方案2】:

    我喜欢用宝石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'}
    

    【讨论】:

    • 它可能不适用于 ruby​​ 2.1.0,因为在时差中您可以看到 distance_in_seconds = ((end_time - start_time).abs).round 这在最新的 ruby​​ 版本中不支持。对于旧版本,我也会使用这个
    【解决方案3】:

    另一种方法是使用ActionView 助手distance_of_time_in_words(请参阅documentation)。如果通常不会给出确切的次要单位,而是“大约 5 天”之类的信息。

    【讨论】:

      【解决方案4】:

      您需要在您的 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
      

      【讨论】:

      • 在控制台中使用日期模块类型require 'date',你很好
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 2017-04-29
      • 2012-04-03
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多