2016-11-08 5 views
0

У меня есть следующий Rails помощник для преобразования миллисекунд до нескольких часов и минут:Преобразовать миллисекунды до нескольких часов и минут в рубине

def get_duration_hrs_and_mins(duration) 
    hours = duration/(3600000 * 3600000) 
    minutes = (duration/60000) % 60000 
    "#{hours}h #{minutes}m" 
rescue 
    "" 
end 

Однако это всегда просто возвращает его в течение нескольких минут (например, 364m) и не показывает часов ... и сохраняйте минуты до 60.

+0

'60000 * 60000' количество * микро * секунд в течение одного часа. – Stefan

+0

@Stefan жаль, что это была проблема с копией и вставкой. Однако я все еще получаю только минуты, а не часы. – Cameron

ответ

4

Вы просчитали количество миллисекунд за 1 час и 1 минуту. Попробуйте следующее:

def get_duration_hrs_and_mins(duration) 
    hours = duration/(1000 * 60 * 60) 
    minutes = duration/(1000 * 60) % 60 
    "#{hours}h #{minutes}m" 
rescue 
    "" 
end 
+0

Спасибо :) Работает отлично! – Cameron

3

Ваши расчеты выключены:

  • второй имеет 1000 миллисекунд
  • минуту имеет 1000 × 60 миллисекунд
  • час имеет 1000 × 60 × 60 миллисекунд

Чтобы получить количество (полных) часов, вы должны разделить количество миллисекунд на 1000 × 60 × 60. Затем остаток можно использовать для вычисления количества минут аналогичным образом.

Это то, что divmod для:

def get_duration_hrs_and_mins(milliseconds) 
    return '' unless milliseconds 

    hours, milliseconds = milliseconds.divmod(1000 * 60 * 60) 
    minutes, milliseconds = milliseconds.divmod(1000 * 60) 
    seconds, milliseconds = milliseconds.divmod(1000) 
    "#{hours}h #{minutes}m #{seconds}s #{milliseconds}ms" 
end 

get_duration_hrs_and_mins(123456789) 
#=> "34h 17m 36s 789ms" 

Я добавил секунды и миллисекунды на выход для демонстрационных целей. И я также заменил блок rescue на предложение охраны, предполагая, что вы хотите обрабатывать значения nil.

Смежные вопросы