pat*_*ick 3 ruby ruby-on-rails intervals
我正在使用Rails 4,Ruby 2.1和PostgreSQL.
我有一个名为"duration"的数据库字段,它是一种间隔数据类型.
在提取此列中的数据时,它将以hh:mm:ss的格式返回,例如01:30:00.
我试图找出一种方法来显示:1小时30分钟
其他例子:02:00:00到2小时02:15:00到2小时,15分02:01:00到2小时,1分钟
任何建议表示赞赏
只需使用duration+inspect
seconds = 86400 + 3600 + 15
ActiveSupport::Duration.build(seconds).inspect
=> "1 day, 1 hour, and 15.0 seconds"
Run Code Online (Sandbox Code Playgroud)
或者它可以稍微定制
ActiveSupport::Duration.build(seconds).parts.map do |key, value|
[value.to_i, key].join
end.join(' ')
=> "1days 1hours 15seconds"
Run Code Online (Sandbox Code Playgroud)
聚苯乙烯
你可以得到秒
1.day.to_i
=> 86400
Run Code Online (Sandbox Code Playgroud)
时间只能解析为ISO8601格式
ActiveSupport::Duration.parse("PT2H15M").inspect
=> "2 hours and 15 minutes"
Run Code Online (Sandbox Code Playgroud)
我会从这样的事情开始:
def duration_of_interval_in_words(interval)
hours, minutes, seconds = interval.split(':').map(&:to_i)
[].tap do |parts|
parts << "#{hours} hour".pluralize(hours) unless hours.zero?
parts << "#{minutes} minute".pluralize(minutes) unless minutes.zero?
parts << "#{seconds} hour".pluralize(seconds) unless seconds.zero?
end.join(', ')
end
duration_of_interval_in_words('02:00:00')
# => '2 hours'
duration_of_interval_in_words('02:01:00')
# => '2 hours, 1 minute'
duration_of_interval_in_words('02:15:00')
# => '2 hours, 15 minutes'
Run Code Online (Sandbox Code Playgroud)