Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的小时和分钟总和_Javascript_Date - Fatal编程技术网

javascript中的小时和分钟总和

javascript中的小时和分钟总和,javascript,date,Javascript,Date,我正在寻找一种简单的方法,用javascript对小时和分钟进行求和,以生成总值: var json1 = { hour : "8", minutes : "15" }; var json2 = { hour : "8", minutes : "45" }; 预期产出: var total = "17h00"; 这里是一个函数式方法,假设您有一个时间数组 var times = [{ hour : "8", minutes : "15" },{ hour : "

我正在寻找一种简单的方法,用javascript对小时和分钟进行求和,以生成总值:

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

var json2 = {
  hour : "8",
  minutes : "45"
};
预期产出:

var total = "17h00";

这里是一个函数式方法,假设您有一个时间数组

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
times.reduce(函数(memo,t){//求和时间
备注[0]+=parseInt(t.hour,10)
备忘录[1]+=parseInt(t.minutes,10)
如果(备忘录[1]>=60){
备忘录[0]+=~~(备忘录[1]/60)
备忘录[1]=备忘录[1]%60
}
回执
},[0,0]).map(函数(t){//映射到所需的格式
if(t<10){
返回“0”+t
}
返回t
}).join('h')/=>17h00

只需在chrome控制台中复制粘贴,即可看到漂亮的结果

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);

看看momentjs@dubes,我知道建议使用
moment.js
来处理所有与日期相关的事情是非常时髦的,但我认为在这里没有必要。到目前为止,你都尝试了什么?现在看起来不像是js问题,更像是一个数学问题。@FrédéricHamidi我给出这个建议不是因为它很时髦,而是为了以防万一。在代码库中只有一个问题需要帮助,这是非常罕见的。若他正在处理日期,那个么这一时刻会有很大帮助。与所有建议一样,它可以自由给出,如果不满足您的需要,也可以被拒绝。如果没有基数,我不会使用
parseInt
,因为看起来前导
0
可能是一个很好的选择,旧的实现会将其解释为octal。如果条目中有json对象的映射,请提供代码的更新。(我事先不知道,我有多少物品进入…@wawanopoulos如果时间超过24小时会发生什么?它会回到00点还是变成1D000点?我想以小时和分钟计算总数。(不在白天)。例如,它可能是(1200h45min),通过斜视观察非常好,将基数添加到parseInt以确保它正在查找十进制值。如果我的条目中有一个对象地图而不是一个array@wawanopoulos你说的“物体地图”是什么意思?值为时间的对象?提供一个有效的JS结构,我可以提供帮助。
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"