我正在尝试找到生成以下输出的最佳方法
<name> job took 30 seconds
<name> job took 1 minute and 20 seconds
<name> job took 30 minutes and 1 second
<name> job took 3 hours and 2 minutes
Run Code Online (Sandbox Code Playgroud)
我启动了这段代码
def time_range_details
time = (self.created_at..self.updated_at).count
sync_time = case time
when 0..60 then "#{time} secs"
else "#{time/60} minunte(s) and #{time-min*60} seconds"
end
end
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法来做到这一点.对于一些非常简单的东西,似乎有很多冗余代码.
另一个用途是:
<title> was posted 20 seconds ago
<title> was posted 2 hours ago
Run Code Online (Sandbox Code Playgroud)
这个代码是类似的,但我使用Time.now:
def time_since_posted
time = (self.created_at..Time.now).count
...
...
end
Run Code Online (Sandbox Code Playgroud) 我在这里找到了这个方法.
start = DateTime.now
sleep 15
stop = DateTime.now
#minutes
puts ((stop-start) * 24 * 60).to_i
hours,minutes,seconds,frac = Date.day_fraction_to_time(stop-start)
Run Code Online (Sandbox Code Playgroud)
我有以下错误:
`<main>': private method `day_fraction_to_time' called for Date:Class (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
我检查了/usr/lib/ruby/1.9.1/date.rb,我发现了它:
def day_fraction_to_time(fr) # :nodoc:
ss, fr = fr.divmod(SECONDS_IN_DAY) # 4p
h, ss = ss.divmod(3600)
min, s = ss.divmod(60)
return h, min, s, fr * 86400
end
Run Code Online (Sandbox Code Playgroud)
但如果我用ruby1.8运行它,我没有问题./usr/lib/ruby/1.8/date.rb给了我:
def self.day_fraction_to_time(fr)
ss, fr = fr.divmod(SECONDS_IN_DAY) # 4p
h, ss = ss.divmod(3600)
min, s = ss.divmod(60)
return h, …Run Code Online (Sandbox Code Playgroud)