将毫秒转换为小时和红宝石中的分钟

时间:2016-11-08 11:32:17

标签: ruby-on-rails 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以下。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

你的计算结束了:

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