how to convert 270921sec into days + hours + minutes + sec ? (ruby)

ruby, time

Solution

It can be done pretty concisely using `divmod`:

t = 270921
mm, ss = t.divmod(60)            #=> [4515, 21]
hh, mm = mm.divmod(60)           #=> [75, 15]
dd, hh = hh.divmod(24)           #=> [3, 3]
puts "%d days, %d hours, %d minutes and %d seconds" % [dd, hh, mm, ss]
#=> 3 days, 3 hours, 15 minutes and 21 seconds

You could probably DRY it further by getting creative with `collect`, or maybe `inject`, but when the core logic is three lines it may be overkill.

Problem

I have a number of seconds. Let's say 270921. How can I display that number saying it is xx days, yy hours, zz minutes, ww seconds?

Original source