使用moment.js计算出错误的日期差

时间:2018-10-11 16:13:18

标签: momentjs

我正在尝试使用moment js计算两个日期之间的天数。

function (value) {
    var expiration= moment(value).format('DDMMYYYY');
    var today = moment().format('DDMMYYYY');
    var dayToExpiration = moment(expiration- today).format('D[days] ,H[hours]');

    console.log(today + " : " + expiration
    console.log(dayToExpiration);

结果是:

 11102018 : 28102020  //--> 11.10.2018 : 28.10.2018
 1 days ,6 hours //why only one day??

3 个答案:

答案 0 :(得分:1)

因为您的dayToExpiration变量应该是moment.Duration对象,而不是字符串。

两个日期时间之间的差是持续时间,而不是日期时间。

答案 1 :(得分:0)

我遇到错误。这个对我有用:

moment.duration(expiration.diff(today))._milliseconds / (1000*60*60*24));

答案 2 :(得分:0)

简短答案:

正如约翰·马达哈文·里斯(John Madhavan-Reese)在回答中所说,您必须使用时刻Duration来表示两个时刻之间的差异。

在代码示例中出现:

在您的代码中,您将根据expirationtoday之间的差异创建一个矩对象。此值由矩解释为自Unix纪元以来的毫秒数(请参见moment(Number)),因此您要在1970年1月1日前后的任意一天创建一个矩对象(请参见moment(expiration- today).format()的输出)。 format()中的D令牌代表每月的一天,因此它给出了“不正确” 输出。

我建议的解决方案:

您可以使用momentjs'diff()计算差异,然后可以使用moment.duration(Number)创建持续时间。

最后,您可以使用moment-duration-format插件(John Madhavan-Reese:D)获得所需的输出

这里有一个现场样本:

function getDiff(value) {
     var expiration= moment(value); // Parse input as momement object
     var today = moment(); // get now value (includes current time)
     // Calculate diff, create a duration and format it
     var dayToExpiration = moment.duration(Math.abs(today.diff(expiration))).format('D[days], H[hours]');

     console.log(today.format('DDMMYYYY') + " : " + expiration.format('DDMMYYYY'));
     console.log(dayToExpiration);
}

getDiff('2018-10-28');
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/2.2.2/moment-duration-format.min.js"></script>