Skip to content

MomentJS - 日期查询

现代日期/时间:使用 Moment.js 查询日期

Section titled “现代日期/时间:使用 Moment.js 查询日期”

Moment.js 提供了几种实用的方法来比较日期和检查它们的属性,简化了常见的逻辑检查,例如日期是否在某个范围内或是否是闰年。

与往常一样,考虑到 Moment.js 的维护状态,建议在新项目中使用 Day.js 或 date-fns 等替代库,它们也提供类似的查询功能。

这些方法允许您比较一个 moment 对象相对于另一个:

方法描述与语法
是否在…之前检查一个 moment 对象是否在另一个 moment 对象之前。
moment().isBefore(Moment|String|Number|Date|Array);
moment().isBefore(Moment|String|..., String); // 可选:指定单位粒度(例如,'year' 年,'month' 月,'day' 天)
moment('2023-10-26').isBefore('2023-11-01'); // true
moment('2023-10-26').isBefore('2023-10-26', 'day'); // false(同一天)
是否与…相同检查一个 moment 对象是否与另一个 moment 对象相同。
moment().isSame(Moment|String|Number|Date|Array);
moment().isSame(Moment|String|..., String); // 可选:指定单位粒度
moment('2023-10-26').isSame('2023-10-26'); // true
moment('2023-10-26T12:00').isSame('2023-10-26T13:00', 'day'); // true(同一天)
moment('2023-10-26T12:00').isSame('2023-10-26T13:00', 'hour'); // false(不同的小时)
是否在…之后检查一个 moment 对象是否在另一个 moment 对象之后。
moment().isAfter(Moment|String|Number|Date|Array);
moment().isAfter(Moment|String|..., String); // 可选:指定单位粒度
moment('2023-11-01').isAfter('2023-10-26'); // true
是否与…相同或在…之前检查一个 moment 对象是否与另一个 moment 对象相同或在之前。
moment().isSameOrBefore(Moment|String|Number|Date|Array);
moment().isSameOrBefore(Moment|String|..., String); // 可选:指定单位粒度
moment('2023-10-26').isSameOrBefore('2023-10-26'); // true
moment('2023-10-25').isSameOrBefore('2023-10-26', 'day'); // true
是否与…相同或在…之后检查一个 moment 对象是否与另一个 moment 对象相同或在之后。
moment().isSameOrAfter(Moment|String|Number|Date|Array);
moment().isSameOrAfter(Moment|String|..., String); // 可选:指定单位粒度
moment('2023-10-26').isSameOrAfter('2023-10-26'); // true
moment('2023-10-27').isSameOrAfter('2023-10-26', 'day'); // true
是否在…之间检查一个 moment 对象是否在另外两个 moment 对象之间。
moment().isBetween(momentLikeStart, momentLikeEnd);
moment().isBetween(start, end, String); // 可选:指定单位粒度
moment().isBetween(start, end, String, String); // 可选:包容性 '()', '[)', '(]', '[]'
moment('2023-10-26').isBetween('2023-10-01', '2023-10-31'); // true
moment('2023-10-31').isBetween('2023-10-01', '2023-10-31', null, '[]'); // true(包含边界)
moment('2023-10-31').isBetween('2023-10-01', '2023-10-31', null, '()'); // false(不包含边界)

这些方法检查 moment 对象或变量的特定特性:

方法描述与语法
是否为夏令时检查当前 moment 对象是否处于夏令时。
moment().isDST();
注意:行为取决于底层 JavaScript 环境确定夏令时的能力。
是否为闰年检查 moment 对象所在的年份是否为闰年。
moment('2024-01-01').isLeapYear(); // true
moment('2023-01-01').isLeapYear(); // false
是否为 Moment 对象检查一个变量是否为 Moment.js 对象。
moment.isMoment(obj);
moment.isMoment(moment()); // true
moment.isMoment(new Date()); // false
是否为原生 Date 对象检查一个变量是否为原生 JavaScript Date 对象。
moment.isDate(obj);
moment.isDate(new Date()); // true
moment.isDate(moment()); // false
const eventStart = moment('2024-03-15');
const eventEnd = moment('2024-03-20');
const userSignupDate = moment('2024-03-18');
const today = moment();
if (userSignupDate.isBetween(eventStart, eventEnd, 'day', '[]')) {
console.log('用户在事件期间报名。');
} else {
console.log('用户未在事件期间报名。');
}
if (today.isAfter(eventEnd)) {
console.log('事件已结束。');
}
if (moment('2024-02-29').isValid() && moment('2024-01-01').isLeapYear()) {
console.log('2024 是闰年,2月29日是有效日期。');
}

这些查询方法是应用程序中处理日期相关逻辑的基本构建块。

更多细节请查阅文档:https://momentjs.com/docs/#/query/