【问题标题】:Time difference in hours以小时为单位的时差
【发布时间】:2010-10-18 16:28:18
【问题描述】:

我正在尝试获取两个不同 Time 实例的小时数差异。我从数据库中获取这些值作为 :datetime 列

我怎样才能做到这一点,以便它在计算中包括月份和年份,同时忽略或四舍五入分钟?这只能手动完成还是有一个功能可以做到这一点?

【问题讨论】:

    标签: ruby time


    【解决方案1】:
    ((date_2 - date_1) / 3600).round
    

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

    【讨论】:

    • 这对我不起作用。也许它自 2009 年以来发生了变化?现在,我必须通过(date_2 - date_1) * 24 来获取时间
    • 在 Rails 4.2 上对我来说完全正常。
    • @Jeff,对不起,我不太懂英语。你在讽刺吗?答案是错误的吗?
    • 第二个答案在 Ruby 2.4.x 上不起作用。考虑使用第一个选项
    • 这两个选项都适用于 Ruby 2.4.x 和 Rails 4 或 5,只要对象是 TimeActiveSupport::TimeWithZone 的实例(您通常从 datetime 数据库列中获得) )。另一方面,对于 DateDatetime 的实例,您需要乘以 24 才能达到相同的效果,因为内部单位是天,而不是秒。
    【解决方案2】:

    您可以使用名为 time_diff 的 gem 以非常有用的格式获取时差

    【讨论】:

      【解决方案3】:

      这很好用,例如用户创建帐户后的小时数

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

      【讨论】:

        【解决方案4】:

        https://rubygems.org/gems/time_difference尝试 Ruby 的 Time Difference gem

        start_time = Time.new(2013,1)
        end_time = Time.new(2014,1)
        TimeDifference.between(start_time, end_time).in_years
        

        【讨论】:

        • 如何只用小时来调用持续时间?不通过日期和年月
        • @HarshaMV 你的意思是:44.hours - 2.hours # => 42.hours?
        【解决方案5】:

        你可以使用 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
        【解决方案6】:

        在 Rails 中,现在有一种更自然的方式来实现这一点:

        > past = Time.now.beginning_of_year
        2018-01-01 00:00:00 +0100
        
        > (Time.now - past) / 1.day
        219.50031326506948
        

        【讨论】:

          【解决方案7】:

          in_hours(Rails 6.1+)

          Rails 6.1 引入了新的ActiveSupport::Duration 转换方法,例如in_secondsin_minutesin_hoursin_daysin_weeksin_monthsin_years

          因此,现在,您的问题可以这样解决:

          date_1 = Time.parse('2020-10-19 00:00:00 UTC')
          date_2 = Time.parse('2020-10-19 03:35:38 UTC') 
          
          (date_2 - date_1).seconds.in_hours.to_i
          # => 3
          

          这里是a link to the corresponding PR

          【讨论】:

            猜你喜欢
            • 2021-08-28
            • 1970-01-01
            • 1970-01-01
            • 2013-06-05
            • 1970-01-01
            • 1970-01-01
            • 2012-08-06
            • 2020-11-12
            • 1970-01-01
            相关资源
            最近更新 更多