2016-11-25 108 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"