使用moment获取两个日期时间之间的时间差,以hh:mm的形式表示

4

我在获取两个时间戳(epoch格式)之间的时间差方面遇到了问题。

我使用了 moment().format("L LT") 将其转换为所需的日期时间格式(MM/DD/YYYY HH:MM (12小时)),但现在的问题是,我希望以 hh:mm 的形式显示这些时间之间的差异。

附:时间差可能超过24小时。

我尝试过:

let timeDiffms,duration,timedifference,
start moment(startTimeStampInMS).format("L LT"),
end = moment(endTimeStampInMS).format("L LT");

timeDiffms = moment(end, "MM/DD/YYYY HH:mm").diff(moment(start, "MM/DD/YYYY HH:mm"));
duration = moment.duration(timeDiffms);
timedifference = Math.floor(duration.asHours()) +":"+duration.minutes();  // result

//output I am getting  
// start = "03/20/2017 3:11 PM" end="03/21/2017 9:45 AM" timedifference = "30:24", (incorrect)
// start = "03/20/2017 10:07 AM" end="03/23/2017 11:24 AM" timedifference = "73:17" (correct)
// start = "03/20/2017 3:11 PM" end="03/23/2017 11:31 AM" timedifference = "80:20" (incorrect) strange 

我不知道这里发生了什么问题。
2个回答

5

根据之前给出的答案,我能够使用相同的逻辑进行解决,并得到了我问题的正确解决方案。

let start moment(startTimeStampInMS),
end = moment(endTimeStampInMS);

let timediffms = end-start;    // difference in ms
let duration = moment.duration(timediffms);
 // _data should not be used because it is an internal property and can 
 //change anytime without  any warning 
//let hours = duration._data.days*24 + duration._data.hours; 
//let min = duration._data.minutes;
let hours = duration.days()*24+ duration.hours();
let min = duration.minutes();
timeDifference = hours +":"+ min;  // Answer

1
不要使用 _data,它是一个内部属性,请使用 days()hours()minutes() - VincenzoC

3
在您当前的解决方案中,您将一个moment对象格式化为字符串,然后再将字符串解析为moment以获取差异。其实没有必要这样做两步,您可以按照以下方式获取持续时间:
start moment(startTimeStampInMS),
end = moment(endTimeStampInMS).format("L LT");

timeDiffms = end.diff(start);
duration = moment.duration(timeDiffms);

如果您的输入是以毫秒为单位:

moment.duration(endTimeStampInMS - startTimeStampInMS);

要获得以HH:mm格式表示的duration,您可以使用moment-duration-format插件,该插件将format方法添加到持续时间对象中。
以下是一个可用的示例:

// Example milliseconds input
let startTimeStampInMS = 1490019060000;
let endTimeStampInMS = 1490085900000;
// Build moment duration object
let duration = moment.duration(endTimeStampInMS - startTimeStampInMS);
// Format duration in HH:mm format
console.log( duration.format('HH:mm', {trim: false}));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>


嘿,谢谢你的回答,但我想要纯粹的Moment.js,不使用任何插件。 - prabh_singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接