Moment.js两个日期之间的持续时间

问题描述 投票:0回答:3

如何使用moment.js获取两个不同日期变量之间的时差,特别是年,月和日?

我找到了这种方法,但我一直得到奇怪的结果。有时结果是提前一个月,所以我添加一个减去一个月的部分来使结果正确,但是当两个日期之间的差异可以分为整年时,它就会落后一个月,但是如果我删除减去的月份更重要的是,它变得更加糟糕。

另外我想将其格式化为“X Years,Y Months,Z days”,但也无法弄清楚如何以这种方式格式化它。

var dateOne = new Date(2000,07,16);
var dateTwo = new Date (1990,07,16);
var updatedDate = moment(dateOne).format('ll');
   
var x = moment(dateOne, 'DD/MM/YYYY').diff(moment(dateTwo, 'DD/MM/YYYY'))
var y = moment.duration(x);
var why = moment(x).subtract(1, 'M');
var z = Math.floor(y.asYears()) + moment.utc(why).format('/MM/DD');
console.log(z);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
javascript date momentjs date-difference
3个回答
0
投票

试试吧?

var firstDate = moment();
var secondDate = moment("2018-03-19");
var yearDiff = firstDate.diff(secondDate, "year");
var monthDiff = firstDate.diff(secondDate, "month");
var dayDiff = firstDate.diff(secondDate, "day");
console.log(yearDiff + " Years, " + monthDiff + " Months, " + dayDiff + " Days");

https://jsfiddle.net/px1brLdk/


0
投票

正如其他人在评论中所说,你不能将持续时间格式化为日期,因为dateOnedateTwo是Date对象,所以不需要moment(dateOne, 'DD/MM/YYYY')中的第二个参数,只需使用moment(Date)

Moverover,请注意,当您使用new Date(year, monthIndex, day) monthIndex从0开始时,请参阅MDN docs

参数monthIndex是从0开始的。这意味着January = 0December = 11

您可以根据需要使用moment-duration-format插件格式化momentjs持续时间,请参阅format()上的plug-in page文档。

这是一个实时样本:

var dateOne = new Date(2000, 7, 16);
var dateTwo = new Date(1990, 7, 16);

var diff = moment(dateOne).diff(moment(dateTwo))
var dur = moment.duration(diff);
var result = dur.format();
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/2.2.2/moment-duration-format.min.js"></script>

0
投票

片刻有一个名为.diff()的方法。 https://momentjs.com/docs/#/displaying/difference/

© www.soinside.com 2019 - 2024. All rights reserved.