将毫秒转换为小时和ruby中的分钟

我有以下Rails帮助器将毫秒转换为小时和分钟:

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

然而,它总是在几分钟内(例如364米)返回它并且不显示小时…并且将分钟保持在60以下。

您在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 

你的计算是关闭的:

  • 一秒钟有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值。