Відповідь, натхненна тим, що Лев Лукомський використовував ActiveSupport :: Тривалість та обробку мілісекунд (корисно для порівняльного коду)
# duration in ms modulus number of ms in one second
milliseconds = duration.in_milliseconds % 1.second.in_milliseconds
# duration in seconds modulus number of seconds in one minute
seconds = (duration / 1.second) % (1.minute / 1.second)
# duration in minutes modulus number of minutes in one hour
minutes = (duration / 1.minute) % (1.hour / 1.minute)
# duration in hours modulus number of hours in one day
hours = (duration / 1.hour) % (1.day / 1.hour)
format("%02d:%02d:%02d:%03d", hours, minutes, seconds, milliseconds) #=> "12:05:00:001"
Звичайно, ви можете продовжити це легко днями, місяцями, роками тощо, використовуючи відповідні методи ActiveSupport та повторюючи ту саму структуру.
Майте на увазі, що для занадто тривалої тривалості це може бути неточним, оскільки тривалість 1 місяць не фіксується в кількості днів, і я не впевнений, як AS: Тривалість вирішує це.