天天看点

js JavaScript 计算时间差(两个日期时间相差的时间,包括毫秒,分钟,天数,差几个月,差几个季度)

工作中遇到任何关于时间的代码,都可以利用momentjs来写

中文网: http://momentjs.cn/

要获取两个时刻之间的差值的时长,则可以将 

diff

 作为参数传给 

moment#duration

支持的度量有 

years

months

weeks

days

hours

minutes

 和 

seconds

。 为了便于开发,从 2.0.0 版本开始支持单数形式。 1.1.1 版本中提供了毫秒以外的度量单位。

默认情况下,

moment#diff

 会将结果截断为零个小数位,并返回一个整数。 如果需要浮点数,则将 

true

 作为第三个参数传入。 在 2.0.0 之前,

moment#diff

 返回的数字会四舍五入到最接近的整数,而不是截断的数字。

支持多种日期格式

moment().diff(Moment|String|Number|Date|Array);

moment().diff(Moment|String|Number|Date|Array, String);

moment().diff(Moment|String|Number|Date|Array, String, Boolean);

var a = moment([2008, 9]);
var b = moment([2007, 0]);
a.diff(b, 'years');       // 1
a.diff(b, 'years', true); // 1.75



           

差几个月

a.diff(b, 'months');    
           

差几个星期

a.diff(b, 'weeks');    
           

差几天

a.diff(b, 'days');    
           

差几个小时

a.diff(b, 'hours');    
           

也可以通过差的分钟数/60算出差的小时数

let diff_minutes = a.diff(b, 'minutes');    

diff_minutes/60
           

如果该时刻早于传给 moment.fn.diff 的时刻,则返回值为负数。

var a = moment();
var b = moment().add(1, 'seconds');
a.diff(b) // -1000
b.diff(a) // 1000
           

这种负数的情况可以使用 Math.abs(x) 计算绝对值

月份和年份的差异

moment#diff

 对月份和年份的差异进行一些特殊处理。 它做了一些优化,以确保具有相同日期的两个月始终是整数。

因此,1月15日至2月15日应该恰好是1个月。

2月28日至3月28日应该恰好是1个月。

2011年2月28日至2012年2月28日应该恰好是1年。

对月份和年份的差异的更改于 2.0.0。 从 2.9.0 版本开始,diff 还支持季度单位。