如何使用moment.js获取两个不同日期变量之间的时差,特别是年,月和日?
我找到了这种方法,但结果一直很奇怪。有时结果要提前一个月,所以我添加了一个减法一个月的部分以使结果正确,但是当两个日期之间的差额可以被整整为整数时,它将变成滞后一个月,但是如果我减去减法月部分,它甚至会变得更糟。
我也想将其格式化为“ X年,Y个月,Z天”,但是也无法弄清楚如何以这种方式格式化。
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>
答案 0 :(得分: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");
答案 1 :(得分:0)
正如其他人在评论中所述,您不能将持续时间格式化为日期,并且由于dateOne
和dateTwo
是Date对象,因此{{ 1}},只需使用moment(Date)
。
移动,请注意,当您使用moment(dateOne, 'DD/MM/YYYY')
new Date(year, monthIndex, day)
从0开始时,请参见MDN docs:
参数
monthIndex
从0开始。这意味着monthIndex
和January = 0
。
您可以根据需要使用moment-duration-format插件格式化Momentjs持续时间,请参阅format()
上的plug-in page文档。
这里有一个现场样本:
December = 11
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);
答案 2 :(得分:0)
Moment具有一个称为.diff()的方法。请使用该方法。 https://momentjs.com/docs/#/displaying/difference/