我有一个看起来像这样的对象:
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"
,第二个"00:00:28"
{" 00:00:11" +&# 34; 00:00:17"),但我得到了其他结果,第一个是1415750406000,第二个是14157504110001415750417000。
我认为错误在这一行,但我无法确切地知道为什么不正确添加moment()对象。
totalduration += moment.utc(carsDict[record][item].duration, 'HH:mm:ss');
这里是JSFiddle。
关于我做错了什么的任何想法?
答案 0 :(得分:1)
你的问题实际上并不在你想到的那一行,而是在这两行中:
var totalduration = '';
totalduration += moment.utc(carsDict[record][item].duration, 'HH:mm:ss');
您从字符串开始并向其添加时刻/日期对象。如果将+
与字符串和任何其他对象一起使用,它将首先将该另一个对象转换为基元,然后转换为字符串,然后连接两者:
"1" + 0 === "10"
所以你得到的结果是由于当时对象首次转换为基元 - 在这种情况下是一个数字(你可以通过调用当前对象上的valueOf
来确认) - 然后是一个字符串代表这个数字。
您需要做的是计算总时差(以毫秒为单位),因此请从数字开始:
var totalduration = 0;
并在添加之前将moment对象转换为数字:
totalduration += Number(moment.utc(carsDict[record][item].duration, 'HH:mm:ss'));
然后使用时刻解析这个数字(这是一个Unix时间戳,或以毫秒为单位的总和)并在设置时格式化它:
carsDict[record][item]['totalduration'] = moment.utc(totalduration).format('HH:mm:ss');