Ruby(使用Rails)将一串时间转换为秒?

Rya*_*yan 3 ruby time datetime ruby-on-rails date

所以,我有一串时间......有些事情

'4 hours'
'48 hours'
'3 days'
'15 minutes'
Run Code Online (Sandbox Code Playgroud)

我想将这些转换为秒.因为'4 hours',这很好

Time.parse('4 hours').to_i - Time.parse('0 hours').to_i
=> 14400 # 4 hours in seconds, yay
Run Code Online (Sandbox Code Playgroud)

但是,这在48小时内不起作用(超出范围误差).它也不工作3天(没有信息错误)等.

有没有一种简单的方法将这些字符串转换为秒?


cor*_*ard 6

你问Ruby与Time.parse的关系是确定一天中的某个时间.那不是你想要的.我能想到的所有库在这方面都是相似的:他们对绝对时间感兴趣,而不是时间长度.

要将字符串转换为我们可以使用的时间格式,我建议使用Chronic(gem install chronic).要转换为秒,我们可以执行与当前时间相关的所有操作,然后根据需要减去该时间以获得绝对秒数.

def seconds_in(time)
    now = Time.now
    Chronic.parse("#{time} from now", :now => now) - now
end

seconds_in '48 hours'   # => 172,800.0
seconds_in '15 minutes' # => 900.0
seconds_in 'a lifetime' # NoMethodError, not 42 ;)
Run Code Online (Sandbox Code Playgroud)

几个快速笔记:

  • from now就是为什么需要慢性病 - 它处理自然语言输入.
  • 我们指出,now对于Time.now从Chronic做出魔法的时间和从结果中减去它的时间变化的情况来说是安全的.它可能永远不会发生,但我认为这比对不起更安全.