我试图使用momentjs来检查给定的日期是今天还是将来。

这是我目前所拥有的:

<script type="text/javascript" src="http://momentjs.com/downloads/moment.min.js"></script>
<script type="text/javascript">

var SpecialToDate = '31/01/2014'; // DD/MM/YYYY

var SpecialTo = moment(SpecialToDate, "DD/MM/YYYY");
if (moment().diff(SpecialTo) > 0) {
    alert('date is today or in future');
} else {
    alert('date is in the past');
}

</script>

代码评估我的日期(2014年1月31日)作为过去的日期。

知道我哪里做错了吗?


当前回答

更新

moment().isSame('2010-02-01', 'day'); // Return true if we are the 2010-02-01

我后来发现了isSame函数,我认为这是用于确定日期是否为今天的正确函数。

原来的答案

以防别人需要,就这么做:

const isToday = moment(0, "HH").diff(date, "days") == 0;

或者如果你想要一个函数:

isToday = date => moment(0,"HH").diff(date, "days") == 0;

date是要检查的日期。

解释

moment(0,“HH”)在午夜返回今天的日期。

date1。Diff (date2, "days")返回date1和date2之间的天数。

其他回答

更新

moment().isSame('2010-02-01', 'day'); // Return true if we are the 2010-02-01

我后来发现了isSame函数,我认为这是用于确定日期是否为今天的正确函数。

原来的答案

以防别人需要,就这么做:

const isToday = moment(0, "HH").diff(date, "days") == 0;

或者如果你想要一个函数:

isToday = date => moment(0,"HH").diff(date, "days") == 0;

date是要检查的日期。

解释

moment(0,“HH”)在午夜返回今天的日期。

date1。Diff (date2, "days")返回date1和date2之间的天数。

要查看今天是否有:

如果我们比较两个同时包含时间信息的日期,那么isSame显然会失败。如果两个日期跨越了新的一天,Diff将失败:

var date1 = moment("01.01.2016 23:59:00", "DD.MM.YYYY HH.mm.ss");
var date2 = moment("02.01.2016 00:01:00", "DD.MM.YYYY HH.mm.ss");
var diff = date2.diff(date1); // 2seconds

我认为最好的方法,即使它不是快速和简短的,是以下:

var isSame = date1.date() == date2.date() && date1.month() == date2.month() && date1.year() == date2.year()

检查它是否在将来:

正如其他用户所建议的那样,diff方法是有效的。

var isFuture = now.diff(anotherDate) < 0 

如果firstDate相同或在(future) secondDate之后返回true否则返回false。Toda是firstDate = new Date();

  static isFirstDateSameOrAfterSecondDate(firstDate: Date, secondDate: Date): boolean {
    var date1 = moment(firstDate);
    var date2 = moment(secondDate);
    if(date1 && date2){
      return date1.isSameOrBefore(date2,'day');
    }
    return false;
  }

有isSame, isBefore和isAfter为日比较时刻的例子;

  static isFirstDateSameSecondDate(firstDate: Date, secondDate: Date): boolean {
    var date1 = moment(firstDate);
    var date2 = moment(secondDate);
    if (date1 && date2) {
      return date1.isSame(date2,'day');
    }
    return false;
  }

  static isFirstDateAfterSecondDate(firstDate: Date, secondDate: Date): boolean {
    var date1 = moment(firstDate);
    var date2 = moment(secondDate);
    if(date1 && date2){
      return date1.isAfter(date2,'day');
    }
    return false;
  }

  static isFirstDateBeforeSecondDate(firstDate: Date, secondDate: Date): boolean {
    var date1 = moment(firstDate);
    var date2 = moment(secondDate);
    if(date1 && date2){
      return date1.isBefore(date2,'day');
    }
    return false;
  }

检查以下内容:

let isContinue = moment().diff('2020-04-04T20:06:11+05:30')/1000

它几秒钟后就回来了。

如果将检查为2分钟状态则

if (isContinue < 120) {
  ..To check otp details or further logic
} else {
   // otp is getting invalid
}

因为似乎还没有人提到它,检查Moment date对象是否在过去的最简单的方法:

momentObj.isBefore()

或者在未来:

momentObj.isAfter()

只需要保留参数为空——这将默认为现在。

还有isSameOrAfter和isSameOrBefore。

注意,这是时间因素。如果你只关心日子,请看Dipendu的答案。