2016-11-25 112 views
-2

我正在尋找一個簡單的方法來概括小時和分鐘在JavaScript中產生一個總價值:總和小時和分鐘在javascript

var json1 = { 
    hour : "8", 
    minutes : "15" 
}; 

var json2 = { 
    hour : "8", 
    minutes : "45" 
}; 

預期輸出:

var total = "17h00"; 
+0

看看momentjs http://momentjs.com/docs/#/durations/add/ – dubes

+1

@dubes,我知道即使是與日期遠程相關的所有內容都可以推薦「moment.js」,但我並不認爲這真的有必要。 –

+2

到目前爲止您嘗試過什麼?它現在看起來不像是一個js問題,但更像是一個數學問題。 –

回答

1
var totalH; 
var totalM; 

addTimes = function(timeMap) { 

    // First simply adding all of it together, total hours and total minutes 
    for (var x in timeMap) { 
     totalH += parseInt(timeMap[x].hour, 10); 
     totalM += parseInt(timeMap[x].minutes, 10); 
    } 

    // If the minutes exceed 60 
    if (totalM >= 60) { 
     // Divide minutes by 60 and add result to hours 
     totalH += Math.floor(totalM/60); 
     // Add remainder of totalM/60 to minutes 
     totalM = totalM % 60; 
    } 

    return totalH + "h" + totalM; 
} 
+1

我不會在沒有基數的情況下使用'parseInt',因爲在這裏看起來''0'可能是一個很好的可能性,而舊版本的實現會將其解釋爲八進制。 – 2016-11-25 16:01:34

+0

如果在入口中我有一個json對象的地圖,你能否提供你的代碼的更新? (我事先不知道,有多少物品進入......) – wawanopoulos

+0

@wawanopoulos如果小時數超過24小時,會發生什麼?它會回到00h00還是會變成1d00h00? –

0

這裏一種功能性的方法,假設你有一系列時間

var times = [{ 
    hour : "8", 
    minutes : "15" 
},{ 
    hour : "8", 
    minutes : "45" 
}] 

迭代時間,求和,然後格式化,然後加入字符串。

times.reduce(function(memo, t) { // sum the times 
    memo[0] += parseInt(t.hour, 10) 
    memo[1] += parseInt(t.minutes, 10) 
    if (memo[1] >= 60) { 
    memo[0] += ~~(memo[1]/60) 
    memo[1] = memo[1] % 60 
    } 
    return memo 
}, [0, 0]).map(function(t) { // map to the desired format 
    if (t < 10) { 
    return '0' + t 
    } 
    return t 
}).join('h') // => 17h00 
+0

能否請更新您的代碼,如果在進入我有地圖對象而不是數組的 – wawanopoulos

+0

@wawanopoulos你是什麼意思「地圖對象」?一個值是時間的對象?提供有效的JS結構,我可以提供幫助。 – Damon

0

鉻控制檯只需複製粘貼,看到漂亮的結果

var json1 = { hour : "8", minutes : "15" }; 
var json2 = { hour : "8", minutes : "45" }; 

function get_add_two_times(json1, json2) { 
    hr   = parseInt(json1.hour) + parseInt(json2.hour); 
    mn   = parseInt(json1.minutes) + parseInt(json2.minutes); 
    final_hr  = hr + Math.floor(mn/60); 
    final_mn  = mn%60; 
    final_mn  = (final_mn < 10) ? '0' + final_mn : final_mn; 

    return final_hr + 'h' + final_mn; 
} 
get_add_two_times(json1,json2); 

一些樣本輸出

var json1 = {hour : "1", minutes : "15"}; 
var json2 = {hour : "02", minutes : "49"}; 
> "4h04" 

var json1 = {hour : "12", minutes : "15"}; 
var json2 = {hour : "12", minutes : "49"}; 
> "25h04"