相关疑难解决方法(0)

如何使用ruby on rails生成人类可读的时间范围

我正在尝试找到生成以下输出的最佳方法

<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)

ruby time ruby-on-rails

27
推荐指数
3
解决办法
3万
查看次数

Ruby,从Date.day_fraction_to_time获取小时,秒和时间

我在这里找到了这个方法.

  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)

ruby comparison datetime method-missing

7
推荐指数
1
解决办法
4317
查看次数