Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.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 在AngularJS中添加momentJS对象时出现问题_Javascript_Angularjs_Momentjs - Fatal编程技术网

Javascript 在AngularJS中添加momentJS对象时出现问题

Javascript 在AngularJS中添加momentJS对象时出现问题,javascript,angularjs,momentjs,Javascript,Angularjs,Momentjs,我有一个像这样的对象: var carsDict = { 391: [ { arrival: "17.43.49", car: "391", date: "11/11/2014", duration: "00:00:06", time: "17.43.43" } ], 396: { 0: { arrival:

我有一个像这样的对象:

var carsDict = { 
391: [
    {
     arrival: "17.43.49",
     car: "391",
     date: "11/11/2014",
     duration: "00:00:06",
     time: "17.43.43"
    }
],

396: {
    0: {
     arrival: "17.20.48",
     car: "396",
     date: "11/11/2014",
     duration: "00:00:11",
     time: "17.20.37",
    },        
    1: {
     arrival: "17.21.27",
     car: "396",
     date: "11/11/2014",
     duration: "00:00:17",
     time: "17.21.10"
    }
}
};
duration属性是由以下行构造的MomentJS对象:

record.duration = moment.utc(moment(record.arrival,'HH:mm:ss')
                  .diff(moment(record.time,'HH:mm:ss'))).format("HH:mm:ss");
下一步是将每个数组中的所有duration对象添加到一起。我通过使用以下代码来实现这一点:

for (record in carsDict) {     
  var totalduration = '';

  for (item in carsDict[record]) {
    // get totalduration figured out..
    totalduration += moment.utc(carsDict[record][item].duration, 'HH:mm:ss');
  }
    
  for (item in carsDict[record]) {
    // now add totalduration to each record        
    carsDict[record][item]['totalduration'] = totalduration; 
  }
};
在上面的例子中,第一个数组的
totalduration
应该是
“00:00:06”
,第二个数组的
“00:00:28”
(“00:00:11”+“00:00:17”),但我得到了其他结果,第一个数组的结果是14157504006000,第二个数组的结果是141575041110001415750417000

我假设错误在这一行,但我不明白为什么不正确添加矩()对象

totalduration += moment.utc(carsDict[record][item].duration, 'HH:mm:ss');
这是一个例子


你知道我做错了什么吗?

事实上,你的问题不在你想的那条线上,而是在这两条线上:

var totalduration = '';
totalduration += moment.utc(carsDict[record][item].duration, 'HH:mm:ss');
您将从一个字符串开始,并向其中添加一个矩/日期对象。如果将
+
与字符串和任何其他对象一起使用,它将首先将该其他对象转换为基本体,然后转换为字符串,然后将两者连接起来:

“1”+0==“10”

因此,您得到的结果是由于矩对象首先被转换为一个原语——在本例中是一个数字(您可以通过调用矩对象上的
valueOf
来确认)——然后是该数字的字符串表示

您需要做的是以毫秒为单位计算总时差,因此从一个数字开始:

var totalduration = 0;
并在添加力矩对象之前将其转换为数字:

totalduration += Number(moment.utc(carsDict[record][item].duration, 'HH:mm:ss'));
然后使用矩分析此数字(Unix时间戳,或以毫秒为单位的总和),并在设置时对其进行格式化:

carsDict[record][item]['totalduration'] = moment.utc(totalduration).format('HH:mm:ss'); 

请澄清“将所有持续时间对象添加到一起”的含义-您希望得到什么结果<代码>“00:00:01”+“00:00:02”=“00:00:03”?完全正确!我需要把它们加在一起作为momentjs对象。太棒了。很好的解释!