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

下一步是将每个数组中的所有持续时间对象添加在一起。我可以通过使用以下代码来做到这一点:

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",第二个数组的 totalduration 应为 "00:00:28 " ("00:00:11"+ "00:00:17"),但我得到了其他结果,第一个结果为 1415750406000,第二个结果为 14157504110001415750417000。

我认为错误就在这一行,但我无法确切地看出为什么没有正确添加 moment() 对象。

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

这是一个JSFiddle .

知道我做错了什么吗?

最佳答案

你的问题其实不在你想象的那一行,而是在这两行:

var totalduration = '';
totalduration += moment.utc(carsDict[record][item].duration, 'HH:mm:ss');

您从一个字符串开始并向其中添加一个时刻/日期对象。如果将 + 与字符串和任何其他对象一起使用,它会首先将该其他对象转换为基元,然后转换为字符串,然后连接两者:

“1”+ 0 ===“10”

因此,您得到的结果是由 moment 对象首先转换为基元引起的 - 在本例中是一个数字(您可以通过在 moment 对象上调用 valueOf 来确认这一点) - 并且然后是该数字的字符串表示形式。

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

var totalduration = 0;

并在添加之前将 moment 对象转换为数字:

totalduration += Number(moment.utc(carsDict[record][item].duration, 'HH:mm:ss'));

然后使用 moment 解析这个数字(这是一个 Unix 时间戳,或者以毫秒为单位的总和),并在设置时对其进行格式化:

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

关于javascript - 在 AngularJS 中添加 momentJS 对象时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26890877/

相关文章:

angularjs - 每次打开模态ui模态时,如何设置对textarea的关注?

javascript - 无法将 Javascript 文件导入到 html.erb 文件

javascript - 向上/向下舍入 momentjs 时刻到最近的分钟

javascript - 下划线将对象转换为数组并按键名排序

javascript - 如何使用 momentjs 检查日期是否至少过去一天?

javascript - 如何在关闭 iframe 后关闭父 p 标签?

javascript - jQuery 显示和隐藏事件问题

javascript - 使用 IPC 实现连续 headless (headless)页面自动化

javascript - (CSS): can i trigger two of css events simultaneously by just triggering one event or the class name that two of events are included?

javascript - Angularjs ng-show 表