Rails имеет DateHelper
для просмотра.Если это не совсем то, что вы хотите, вам, возможно, придется написать свой собственный.
@ Младен Ябланович ответит с хорошим примером кода.Однако, если вы не возражаете продолжать настраивать пример гуманизированного метода, это может быть хорошей отправной точкой.
def humanized_array_secs(sec)
[[60, 'minutes '], [60, 'hours '], [24, 'days ']].inject([[sec, 'seconds']]) do |ary, (count, next_name)|
div, prev_name = ary.pop
quot, remain = div.divmod(count)
ary.push([remain, prev_name])
ary.push([quot, next_name])
ary
end.reverse
end
Это дает вам массив значений и имен единиц, которыми вы можете манипулировать.
Если первый элемент ненулевой, это количество дней.Вы можете написать код для обработки нескольких дней, например, показывать недели, месяцы и годы.В противном случае обрежьте начальные 0
значения и возьмите следующие два.
def humanized_secs(sec)
return 'now' if 1 > sec
humanized_array = humanized_array_secs(sec.to_i)
days = humanized_array[-1][0]
case
when 366 <= days
"#{days / 365} years"
when 31 <= days
"#{days / 31} months"
when 7 <= days
"#{days / 7} weeks"
else
while humanized_array.any? && (0 == humanized_array[-1][0])
humanized_array.pop
end
humanized_array.reverse[0..1].flatten.join
end
end
Код даже находит применение для оператора ruby while
.