Convert duration to hours:minutes:seconds (or similar) in Rails 3 or Ruby Convert duration to hours:minutes:seconds (or similar) in Rails 3 or Ruby ruby ruby

Convert duration to hours:minutes:seconds (or similar) in Rails 3 or Ruby


Summing up:

assuming that total_seconds = 3600

Option 1:

distance_of_time_in_words(total_seconds) #=> "about 1 hour"

Option 2:

Time.at(total_seconds).utc.strftime("%H:%M:%S") #=> "01:00:00"

Note: it overflows, eg. for total_seconds = 25.hours.to_i it'll return "01:00:00" also

Option 3:

seconds = total_seconds % 60minutes = (total_seconds / 60) % 60hours = total_seconds / (60 * 60)format("%02d:%02d:%02d", hours, minutes, seconds) #=> "01:00:00"

Option 4:

ActiveSupport::Duration.build(total_seconds).inspect #=> "1 hour"# ORparts = ActiveSupport::Duration.build(total_seconds).parts"%02d:%02d:%02d" % [parts.fetch(:hours, 0),                    parts.fetch(:minutes, 0),                    parts.fetch(:seconds, 0)] #=> "01:00:00"


Ruby's string % operator is too unappreciated and oft forgotten.

"%02d:%02d:%02d:%02d" % [t/86400, t/3600%24, t/60%60, t%60]

Given t is a duration in seconds, this emits a zero-padded colon-separated string including days. Example:

t = 123456"%02d:%02d:%02d:%02d" % [t/86400, t/3600%24, t/60%60, t%60]=> "01:10:17:36"

Lovely.