2016-11-08 67 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的值。