Я просто хочу поделиться своим кодом, чтобы получить более читаемое время.
вместо использования distance_of_time_in_words
, как @Ryan Bigg, мне больше нравится @Sören Kuklau.
но чтобы показать дружественную человеку форму, я делаю что-то вроде этого.
def get_duration opts
from = Time.parse opts[:from]
to = Time.parse opts[:to]
duration = to - from
durationLabel = []
separator = " "
hours = (duration / 3600).floor
restDuration = duration%3600
durationLabel << "#{hours}h" if hours > 0
return durationLabel.join separator if restDuration.floor == 0
minutes = (restDuration / 60).floor
restDuration = duration%60
durationLabel << "#{minutes}m" if minutes > 0
return durationLabel.join separator if restDuration.floor == 0
seconds = restDuration.floor
durationLabel << "#{seconds}s" if seconds > 0
durationLabel.join separator
end
get_duration from: "2018-03-15 11:50:43", to: "2018-03-15 11:51:50"
# return 1m 7s
вычислит часы, минуты и секунды.
вместо того, чтобы получить неопределенный ответ, такой как about 1 minutes
или жесткий ответ, такой как 67.0
, мы получим что-то более дружелюбное к человеку, но точное до секунды, как 1m 7s