您的位置:

Moment.js的diff方法详解

一、简介

Moment.js 是一个 JavaScript 日期处理类库,提供了日期格式化、日期加减、和日期语言本地化等功能。其中,moment().diff() 方法可以计算两个时间之间的差距。本文将从以下几个方面对 diff 方法进行详细阐述。

二、参数说明

moment().diff(moment, String|Boolean);
// 第三个参数可选,根据需要传入

moment() 返回当前时间,参数可以传入时间字符串或日期对象,第二个参数也可以是时间字符串或日期对象。第三个参数是可选的,如果传入 true,则计算的结果将返回一个整数,表示两个时间之间相差的毫秒数。如果传入 false 或者不传入,则计算的结果将返回一个 Moment.js 的 Duration 对象。

三、计算不同时段时间差

const start = moment("2021-06-01T00:00:00.000Z");
const end = moment("2021-06-05T05:30:30.000Z");
console.log(end.diff(start, 'days')); // 4
console.log(end.diff(start, 'hours')); // 101
console.log(end.diff(start, 'minutes')); // 6060

以上代码创建了两个 Moment.js 对象分别表示 6 月 1 日和 6 月 5 日 5 点 30 分 30 秒。接着用 diff() 方法计算它们之间的时间差,返回值分别表示相差的天数、小时数、分钟数。

四、计算同一时段时间差

const start = moment();
const end = moment().add(2, 'hours');
console.log(end.diff(start, 'hours')); // 2

以上代码创建了两个 Moment.js 对象分别表示现在和两个小时后的时间。接着用 diff() 方法计算它们之间的时间差,返回值表示相差的小时数。

五、获取日期对象差异信息

const start = moment("2021-06-01T00:00:00.000Z");
const end = moment("2021-06-05T05:30:30.000Z");
const duration = moment.duration(end.diff(start));
console.log(duration.hours()); // 5
console.log(duration.minutes()); // 30
console.log(duration.seconds()); // 30

以上代码同样创建了两个 Moment.js 对象分别表示 6 月 1 日和 6 月 5 日 5 点 30 分 30 秒。接着用 diff() 方法计算它们之间的时间差,并用 moment.duration() 方法将其转化为 Duration 对象。最后获取该对象的小时数、分钟数、秒数。

六、获取日期字符串差异信息

const start = moment("2021-06-01T00:00:00.000Z");
const end = moment("2021-06-05T05:30:30.000Z");
console.log(end.diff(start, 'days') + 'd ' + end.diff(start, 'hours')%24 + 'h ' + end.diff(start, 'minutes')%60 + 'm ' + end.diff(start, 'seconds')%60 + 's');
// 4d 5h 30m 30s

以上代码同样创建了两个 Moment.js 对象分别表示 6 月 1 日和 6 月 5 日 5 点 30 分 30 秒。接着用 diff() 方法计算它们之间的时间差,并分别获取相差的天数、小时数、分钟数和秒数,最后将其拼接成字符串以便展示。

七、获取过去时间差

const age = moment('1999-11-01').fromNow();
console.log(age); // 21 years ago

以上代码创建了一个 Moment.js 对象表示 1999 年 11 月 1 日。接着用 fromNow() 方法计算从该时间到现在的时间差,返回值为字符串表示“多少时间前”。