如何仅比较moment.js中的日期

时间:2015-04-07 14:50:00

标签: javascript momentjs

我是moment.js的新手。我有一个日期对象,它有一些时间与它相关联。我只想检查该日期是否大于或等于今天的日期, 排除比较时间。

 var dateToCompare = 2015-04-06T18:30:00.000Z

我只想检查dateToCompare是否等于或大于今天的日期。 我已经检查了is.ame of moment.js,但它似乎采取字符串,只有日期部分。但我不想将我的日期转换为字符串或进一步操纵它。因为我担心javascript在将该日期转换为字符串时可能会出现意外情况(例如添加偏移量或dst等),或者可能是我错了。

来自docs的样本isSame()

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

此外,我正在寻找像isSame()和isAfter()这样的东西组合成一个声明。

我只需要使用moment.js进行比较。请不要建议简单的javascript日期比较。

6 个答案:

答案 0 :(得分:130)

您传递第二个参数以指定粒度的

The docs are pretty clear

  

如果要将粒度限制为毫秒以外的单位,请将单位作为第二个参数传递。

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

由于第二个参数决定了精度,而不仅仅是一个要检查的值,因此使用day将检查年,月和日。

对于您的情况,您将'day'作为第二个参数传递。

答案 1 :(得分:26)

同时您可以使用isSameOrAfter方法:

moment('2010-10-20').isSameOrAfter('2010-10-20', 'day');

答案 2 :(得分:2)

就我而言,我确实按照以下代码比较了2个日期,这可能会对您有所帮助...

var date1 = "2010-10-20";
var date2 = "2010-10-20";
var time1 = moment(date1).format('YYYY-MM-DD');
var time2 = moment(date2).format('YYYY-MM-DD');
if(time2 > time1){
    console.log('date2 is Greter than date1');
}else if(time2 > time1){
    console.log('date2 is Less than date1');
}else{
    console.log('Both date are same');
}

输出:

  

两个日期都相同

答案 3 :(得分:2)

您可以使用startOf('day')方法仅比较日期

示例:

var dateToCompare = moment("06/04/2015 18:30:00");
var today = moment(new Date());

dateToCompare.startOf('day').isSame(today.startOf('day'));

答案 4 :(得分:1)

使用isAfter()方法检查一个日期是否是另一个日期。

moment('2020-01-20').isAfter('2020-01-21'); // false
moment('2020-01-20').isAfter('2020-01-19'); // true

使用isBefore()方法检查一个日期是否在另一个日期之前。

moment('2020-01-20').isBefore('2020-01-21'); // true
moment('2020-01-20').isBefore('2020-01-19'); // false

使用isSame()方法检查一个日期是否与另一个日期相同。

moment('2020-01-20').isSame('2020-01-21'); // false
moment('2020-01-20').isSame('2020-01-20'); // true

答案 5 :(得分:0)

moment('date').toDate().getTime() > moment()