Moment.js中文文档系列之五日期时间的查询(Query)

 2015年10月24日    7763     声明


Moment可以进行一些时间的查询和比较的操作,如:比较是否在另一个时间之前或之后、是否在另外两个时间之间、是否闰年等。

  1. 是否之前:isBefore()
  2. 是否相同:isSame()
  3. 是否之后:isAfter()
  4. 是否之间:isBetween()
  5. 是否闰年:isLeapYear()
  6. 是否夏令时:isDST()
  7. 是否被转换的夏令时:isDSTShifted()
  8. 是否Moment对象:isMoment()
  9. 是否Date对象:isDate()


1. 是否之前:isBefore()

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

检查moment是否在另一个时间之前。

moment('2010-10-20').isBefore('2010-10-21'); // true

如果你想将比较粒度限制为毫秒以外的单位,可以在第二个参数设置要比较的单位。

当设置了第二个参数后,不仅仅会比较这一个级别的单位,当以天为单位比较时,同时会比较年、月、日。

moment('2010-10-20').isBefore('2010-12-31', 'year'); // false
moment('2010-10-20').isBefore('2011-01-01', 'year'); // true
 

所有在moment().startOf()中支持的单位,在moment().isAfter()moment().isSame()moment().isAfter()moment().isBetween()中也一样支持。

year month week day hour minute second


2. 是否相同:isSame()

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

检查moment是否和另一个时间相同。

moment('2010-10-20').isSame('2010-10-20'); // true

如果你想将比较粒度限制为毫秒以外的单位,可以在第二个参数设置要比较的单位。

moment('2010-10-20').isSame('2009-12-31', 'year');  // false
moment('2010-10-20').isSame('2010-01-01', 'year');  // true
moment('2010-10-20').isSame('2010-12-31', 'year');  // true
moment('2010-10-20').isSame('2011-01-01', 'year');  // false

当设置了第二个参数后,不仅仅会比较这一个级别的单位。输入低级别的单位后,也同时会比较其上级单位,如:当以天为单位比较时,同时会比较年、月、日。

moment('2010-01-01').isSame('2011-01-01', 'month'); // false, 年不同
moment('2010-01-01').isSame('2010-02-01', 'day');   // false, 月不同


3. 是否之后:isAfter()

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

检查moment是否在另一个时间之后。

moment('2010-10-20').isAfter('2010-10-19'); // true

如果你想将比较粒度限制为毫秒以外的单位,可以在第二个参数设置要比较的单位。

当设置了第二个参数后,不仅仅会比较这一个级别的单位,当以天为单位比较时,同时会比较年、月、日。

 moment('2010-10-20').isAfter('2010-01-01', 'year'); // false
moment('2010-10-20').isAfter('2009-12-31', 'year'); // true


4. 是否之间:isBetween()

moment().isBetween(moment-like, moment-like);
moment().isBetween(moment-like, moment-like, String);
// moment-like 可以是这几种形式:Moment|String|Number|Date|Array

检查moment是否在另外两个时间之间,可选比较单位可以是:分、小时、天等。

moment('2010-10-20').isBetween('2010-10-19', '2010-10-25'); // true

如果你想将比较粒度限制为毫秒以外的单位,可以在第三个参数设置要比较的单位。

moment('2010-10-20').isBetween('2010-01-01', '2012-01-01', 'year'); // false
moment('2010-10-20').isBetween('2009-12-31', '2012-01-01', 'year'); // true


5. 是否闰年:isLeapYear()

moment().isLeapYear();

>moment().isLeapYear()在是闰年是返回true,否则返回false

moment([2000]).isLeapYear() // true
moment([2001]).isLeapYear() // false
moment([2100]).isLeapYear() // false


6. 是否夏令时:isDST()

moment().isDST();

>moment().isDST()用于检查当前moment是否是夏令时。

moment([2011, 2, 12]).isDST(); // false, March 12 2011 is not DST
moment([2011, 2, 14]).isDST(); // true, March 14 2011 is DST


7. 是否被转换的夏令时:isDSTShifted()

moment('2013-03-10 2:30', 'YYYY-MM-DD HH:mm').isDSTShifted()

另一个重要的验证是当前moment是否来自于夏令时。

moment('2013-03-10 2:30', 'YYYY-MM-DD HH:mm').format(); //=> '2013-03-10T01:30:00-05:00'


8. 是否Moment对象:isMoment()

moment.isMoment(obj);

moment.isMoment()方法用于检查,是否是一个moment对象。

moment.isMoment() // false
moment.isMoment(new Date()) // false
moment.isMoment(moment()) // true


9. 是否Date对象:isDate()

moment.isDate(obj);

moment.isDate()方法用于检查,是否是一个JavaScriptmoment对象。

moment.isDate(); // false
moment.isDate(new Date()); // true
moment.isDate(moment()); // false