2016-11-08 108 views
0

我有以下Rails的助手毫秒转换成小时,分钟:转换毫秒到小时和分钟红宝石

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

但是它始终只是返回它在几分钟内(如364米)和不显示小时...并将分钟保持在60以下。

+0

'60000 * 60000'是一小时* micro *秒的数量。 – 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的值。