У меня есть много секунд. Скажем, 270921. Как я могу отобразить то число, говоря, что это - xx дни, yy часы, zz минуты, ww секунды?
Это можно сделать довольно лаконично, используя 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
Вероятно, вы могли бы еще больше очистить его от мусора, используя collect
, или, возможно, inject
, но когда основная логика состоит из трех строк, это может быть излишеством.
В Rails есть помощник, который переводит расстояние времени в слова. Вы можете посмотреть его реализацию: distance_of_time_in_words