【问题标题】:Getting the number of days/hours/minutes between two times in Ruby on Rails在 Ruby on Rails 中获取两次之间的天数/小时/分钟数
【发布时间】:2021-09-16 12:19:54
【问题描述】:

取两个日期,例如:

irb(main):074:0> assessment.next_run_time
=> 2021-07-07 01:00:00 UTC
irb(main):075:0> Time.now
=> 2021-07-05 18:46:53 +0000
irb(main):076:0> 

如何获得单词的差异,例如“XX 天 XX 小时 XX 分钟”。我能得到的最接近的是:

irb(main):077:0> Time.at(((assessment.next_run_time - Time.now) / 1.minutes)).strftime('%H:%M:%S')
=> "00:30:12"

但只需要正确格式化,以便在发给用户的电子邮件中易于理解。如果有

【问题讨论】:

    标签: ruby-on-rails time


    【解决方案1】:

    TimeDifference gem 解决了这个问题:

    irb(main):081:0> TimeDifference.between(Time.now, assessment.next_run_time).humanize
    => "1 Day, 6 Hours, 4 Minutes and 30 Seconds"
    

    【讨论】:

      【解决方案2】:

      在纯 Ruby 中:

      require 'time'
      
      def time_diff(time1, time2)
        diff = time2 - time1
        days,  diff = diff.divmod(86400)
        hours, diff = diff.divmod(3600) 
        mins,  diff = diff.divmod(60)
        { days: days, hours: hours, mins: mins, seconds: diff }
      end
      

      一分钟有 60 秒,一小时有 60*60 = 3600 秒,一天有 24*3600 = 86400 秒。

      请参阅Integer#divmod,这是一种方便但未被充分利用的方法。

      让我们试试吧。

      t1 = Time.parse("05-Jul-21, 6:33")
        #=> 2021-07-05 06:33:00 -0700
      
      t2 = Time.parse("07-Jul-21, 23:18")
        #=> 2021-07-05 06:33:00 -0700
      
      h = time_diff(t1, t2)
        #=> {:days=>2, :hours=>16, :mins=>45}
      

      一旦您有了哈希h,您就可以随意显示结果。例如:

      h.map { |k,v|"#{v} #{k}" }.join(' ')
       #=> "2 days 16 hours 45 mins"
      

      【讨论】:

        猜你喜欢
        • 2019-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-03
        • 1970-01-01
        • 2010-12-20
        相关资源
        最近更新 更多