2017-07-23 58 views
0

我想編寫一個函數,其格式爲hh:mm(26:40)作爲參數字符串。格式化持續時間字符串到h m d

我需要的函數返回的輸出字符串「1 d,2小時,40分鐘」

我試圖尋找一個內置的功能或最佳實踐沒有運氣。

我已經提出了下面的代碼,它的工作原理,但我覺得它是過度的,我想知道是否有最佳做法。

var t = "27:20" 
 
var res = foo(t) 
 
document.writeln(res); 
 

 
function foo(st) { 
 
    var splittedSt = st.split(":") 
 
    var days = parseInt(splittedSt[0]/24, 10) + " d"; 
 
    var hours = Number(splittedSt[0]) - Number(days.split(" ")[0]) * 24 + " h"; 
 
    var minutes = splittedSt[1] + " min"; 
 
    return days + " " + hours + " " + minutes 
 
}

+1

使用瞬間或date.js來處理,你有5行代碼,這樣一個簡單的任務將是最終的矯枉過正 – mplungjan

+0

@mplungjan你介意秀我們所有人如何解決這個瑣碎的任務?大多數日期表示似乎遵循約定,即每天不超過24小時。因此,您需要以任何方式操縱輸入。 – Jonas

+0

它在OP的問題中解決。他希望代碼不過分,我解釋說,添加一個框架或類似的東西,使他現在的5條線以更優雅的方式工作是實際的矯枉過正 – mplungjan

回答

0

我能夠與momentjs LIB做的mplungjan在他的評論中提出(已經與該項目中使用的時刻)。

一個簡單的行與相關的格式。

console.log(moment.duration("27:20").format("d [d], h [h], m [min]")); 

會給結果:

1 d, 3 h, 20 min 
0

你想讓這個

var t = "27:20" 
 
var res = foo(t) 
 
document.writeln(res); 
 
function foo(st){ 
 
    var splittedSt = st.split(":") 
 
    var days = parseInt(splittedSt[0]/24) + " d"; 
 
    var hours = parseInt(splittedSt[0] % 24) + " h"; 
 
    var minutes = splittedSt[1] + " min"; 
 
    return days + " " + hours + " " + minutes 
 
}

+1

除了刪除一些不必要的數字之外,你有什麼改進? – mplungjan

0

你的做法是正確的。一般來說,您試圖解決的任務可以分解爲兩個步驟。

  1. 計算在輸入的總數OG基聯(這裏分鐘再予)
  2. 轉換這個號碼,以所需的格式。

下面的代碼將輸入到年中,日,小時,分鐘:

document.writeln("27:20 -> " + foo("27:20:0")); 
 
document.writeln("8760:0 -> " + foo("8760:0")); 
 
document.writeln("-8760:0 -> " + foo("-8760:0")); 
 

 
function foo(st) { 
 
    var splittedSt = st.split(":") 
 
    // STEP 1 
 
    var total = parseInt(splittedSt[0]) * 60 + parseInt(splittedSt[1]); 
 
    
 
    // STEP 2 
 
    var minutes = parseInt(total % 60); 
 
    var hours = parseInt(total/60) % 24;  
 
    var days = parseInt(total/60/24) % 365; 
 
    var years = parseInt(total/60/24/365) ; 
 
    
 
    return years + " years " + days + " days " + hours + " hours " + minutes + " minutes" 
 
}

雖然這看起來像一個代碼戰利品在相對簡單的問題,真的沒有其他辦法可以做到這一點。然而,大多數編程語言都有內置函數來處理很多簡單的問題。不幸的是,我在JavaScript中的經驗非常有限。因此,我無法做到這一點,但@mplungjan可能會有這方面的一些輸入?

+0

改進在哪裏? – mplungjan

+0

這個問題不是爲了矯枉過正,而是爲了...... –

相關問題