通过减去两个日期,我无法获得以天,小时和分钟为单位的实际值

时间:2018-07-04 05:59:03

标签: momentjs

我是这个图书馆的新人。我有2个日期,我想获取两者之间的天数,分钟数和小时数之差。但由于某种原因,输出是错误的数据。我基于此页面

enter image description here

获得确切的差异,它与我的结果不同。我究竟做错了什么?

var now=2018-07-04 00:37:02;
var then=2018-07-05 08:00:00;

moment.utc(moment(now,"YYYY/MM/DD HH:mm:ss").diff(moment(then,"YYYY/MM/DD 
HH:mm:ss"))).format("HH:mm:ss");

output is : 16:37

1 个答案:

答案 0 :(得分:0)

这里有两个重大问题:

  • a.diff(b)返回a - b,因此,如果a晚于b,则为正。您正在有效地使用now.diff(then),因此当前会带来负面的影响,我怀疑您期望它是正面的。
  • 您正在使用moment.utc持续时间转换为日期/时间。值不是是日期/时间,因此不应将其视为一个。而是使用moment.duration(...)转换为moment.js Duration对象,然后可以根据需要处理该对象。

这是一个完整的示例,为了便于阅读,对每个转换进行了细分:

var now = "2018-07-04 00:37:02";
var then = "2018-07-05 08:00:00";
var parsedNow = moment(now, "YYYY/MM/DD HH:mm:ss");
var parsedThen = moment(then, "YYYY/MM/DD HH:mm:ss");
var diff = parsedThen.diff(parsedNow);
var durationDiff = moment.duration(diff);
alert(durationDiff.toISOString());

输出:PT31H22M58S

那31小时是1天+ 7小时,等等。虽然持续时间的概念是天,月,年等,但我看不到将从diff创建的持续时间标准化为“ 1天”的任何方法7小时”。 (当然可以做到,但只能做到几天-您不能在不提供更多上下文的情况下将数月归一化。)