tokuhirom's blog

[ruby] 10s 10m みたいな文字列から秒数を求めるには chronic_duration を使う

https://github.com/hpoydar/chronic_duration

なにかの実行間隔のような設定がある場合、chronicduration を利用してパースすることができる。 実行例は以下の通り。integer をそのまま渡すとエラーになるので、integer が渡ってきそうなケースでは tos して渡すようにするのがよさそう。 パースできない場合には nil が返ってくるので、nil もケアしてあげる必要があります。

[1] pry(main)> require 'chronic_duration'
=> true
[2] pry(main)> ChronicDuration.parse(3)
NoMethodError: undefined method `downcase' for 3:Fixnum
from /Users/tokuhirom/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/chronic_duration-0.10.6/lib/chronic_duration.rb:181:in `cleanup'
[3] pry(main)> ChronicDuration.parse(3.to_s)                                                                                                  
=> 3
[4] pry(main)> ChronicDuration.parse('3')                                                                                                      
=> 3
[5] pry(main)> ChronicDuration.parse('3s')
=> 3
[6] pry(main)> ChronicDuration.parse('3m')                                                                                                     
=> 180
[7] pry(main)> ChronicDuration.parse('3h')                                                                                                     
=> 10800
[8] pry(main)> 3*60*60
=> 10800
[9] pry(main)> ChronicDuration.parse("carrot")
=> nil
Created: 2016-05-17 01:21:38 +0000
Updated: 2016-05-17 01:21:38 +0000