【问题标题】:Convert the total seconds to time in rails将总秒数转换为 Rails 中的时间
【发布时间】:2017-09-08 01:36:33
【问题描述】:

我的总秒数是125557

当我尝试使用

将秒数转换为“H:M:S”时
Time.at(125557).utc.strftime("%H:%M:%S")

它给了10:52:37

但我实际上想要34:52:37(在 10:52:37 中增加一天)

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4.2


    【解决方案1】:

    好吧,鉴于34:52:37 不是有效的时间字符串,为此使用时间解析/转换库毫无意义。最好手动计算。 divmod 是你这里最好的朋友。看看:

    secs = 125557
    secs_in_an_hour = 3600
    
    hours, secs = secs.divmod(secs_in_an_hour)
    hours # => 34
    secs # => 3157 # This now contains only minutes and seconds, no full hours
    

    将其演变为完整的工作解决方案应该很容易。

    【讨论】:

    • 这样的回答是我佩服你的原因。总是谦虚并致力于帮助像我这样的新人。感谢您参加 SO。继续努力吧。 :)
    • @Surya:在 10k 代表下,你几乎没有资格成为新人。但是谢谢:)
    【解决方案2】:

    试试这个

    total_seconds = 125557
    
    seconds = total_seconds % 60
    minutes = (total_seconds / 60) % 60
    hours = total_seconds / (60 * 60)
    
    format("%02d:%02d:%02d", hours, minutes, seconds)
    

    【讨论】:

      【解决方案3】:

      如果您想更轻松地处理周、日、小时、分钟和秒,可以尝试ruby-duration gem

      d = Duration.new(125557)
      => #<Duration:0x007f84180758e8 @days=1, @hours=10, @minutes=52, @negative=false, @seconds=37, @total=125557, @weeks=0>
      d.total_hours
      => 34
      d.total_minutes
      => 2092
      

      【讨论】:

        【解决方案4】:

        Rails 6.1.0 开始,您可以:

        1.day.in_hours # => 24.0
        3600.seconds.in_hours # => 1.0
        

        文档:https://api.rubyonrails.org/classes/ActiveSupport/Duration.html#method-i-in_hours

        【讨论】:

        • 这个超级有用!不需要宝石
        【解决方案5】:

        我在这里发布了我的答案https://stackoverflow.com/a/62562658/2970582 ActiveSupport::Duration + inspect 给你有效的结果

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-04-27
          • 1970-01-01
          • 2011-07-28
          • 1970-01-01
          • 2011-08-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多