Ruby可以随时打印出时差(持续时间)吗?

nop*_*ole 23 ruby time datetime

Ruby可以做这样的事吗?

irb(main):001:0> start = Time.now
=> Thu Nov 05 01:02:54 -0800 2009

irb(main):002:0> Time.now - start
=> 25.239

irb(main):003:0> (Time.now - start).duration
=> "25 seconds"
Run Code Online (Sandbox Code Playgroud)

(持续时间方法现在不存在)......同样,报告

23 minutes and 35 seconds
1 hour and 33 minutes
2 days and 3 hours
Run Code Online (Sandbox Code Playgroud)

(报告整个持续时间,最多可报告多少秒,或报告最多2个数字和单位(如果报告日期和小时,则无需告知多少分钟))

Mic*_*rds 37

这是实现此目的的一种快速而简单的方法.设置秒,分钟,小时和天的预定义测量值.然后根据数字的大小,输出与这些单位相应的字符串.我们将扩展Numeric,这样就可以调用该方法上的任何数字类(Fixnum,Bignum或在您的案件Float).

class Numeric
  def duration
    secs  = self.to_int
    mins  = secs / 60
    hours = mins / 60
    days  = hours / 24

    if days > 0
      "#{days} days and #{hours % 24} hours"
    elsif hours > 0
      "#{hours} hours and #{mins % 60} minutes"
    elsif mins > 0
      "#{mins} minutes and #{secs % 60} seconds"
    elsif secs >= 0
      "#{secs} seconds"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 对于一个或多个项目等于一(1小时1分钟=> 1小时1分钟)的情况,也许应该增加一些额外的处理. (2认同)
  • @Tilo结果*不*不正确。OP没有指定跳过等于0的单位。“…最多报告2个数字和单位(如果报告了日期和小时,则无需说出多少分钟)”。 (2认同)

EmF*_*mFi 5

查看 Rails DateHelper.distance_of_time_in_words方法。它将为您提供一个良好的起点。尽管充满了神奇的数字,但该方法应该适合您。