Moment JS - 检查日期是今天还是将来

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Moment JS - 检查日期是今天还是将来相关的知识,希望对你有一定的参考价值。

我正在尝试使用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日)作为过去的日期。

知道我做错了什么吗?

答案

在阅读文档:http://momentjs.com/docs/#/displaying/difference/之后,你必须将diff函数看作减号运算符。

                   // today < future (31/01/2014)
today.diff(future) // today - future < 0
future.diff(today) // future - today > 0

因此,你必须扭转你的状况。

如果要检查一切正常,可以在函数中添加一个额外的参数:

moment().diff(SpecialTo, 'days') // -8 (days)
另一答案

如果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;
  }

有比赛,是比赛之前和之后的比赛时刻的例子;

  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;
  }
另一答案

使用最简单的一个来检查将来的日期

if(moment().diff(yourDate) >=  0)
     alert ("Past or current date");
else
     alert("It is a future date");
另一答案
function isTodayOrFuture(date){
  date = stripTime(date);
  return date.diff(stripTime(moment.now())) >= 0;
}

function stripTime(date){
  date = moment(date);
  date.hours(0);
  date.minutes(0);
  date.seconds(0);
  date.milliseconds(0);
  return date;
}

然后只需使用它:

isTodayOrFuture(YOUR_TEST_DATE_HERE)
另一答案

moment().subtract(1, "day");的帮助下,选择昨天查看过去几天

参考: - http://momentjs.com/docs/#/manipulating/subtract/

function myFunction() {
  var yesterday = moment().subtract(1, "day").format("YYYY-MM-DD");
  var SpecialToDate = document.getElementById("theDate").value;

  if (moment(SpecialToDate, "YYYY-MM-DD", true).isAfter(yesterday)) {
    alert("date is today or in future");
    console.log("date is today or in future");
  } else {
    alert("date is in the past");
    console.log("date is in the past");
  }
}
<script src="http://momentjs.com/downloads/moment.js"></script>
<input type="date" id="theDate" onchange="myFunction()">
另一答案

我想要它的东西,但最终找到了一个你可以尝试的技巧

somedate.calendar(compareDate, { sameDay: '[Today]'})=='Today'

var d = moment();
 var today = moment();
 
 console.log("Usign today's date, is Date is Today? ",d.calendar(today, {
    sameDay: '[Today]'})=='Today');
    
 var someRondomDate = moment("2012/07/13","YYYY/MM/DD");
 
 console.log("Usign Some Random Date, is Today ?",someRondomDate.calendar(today, {
    sameDay: '[Today]'})=='Today');
    
  
 var anotherRandomDate =  moment("2012/07/13","YYYY/MM/DD");
 
 console.log("Two Random Date are same date ? ",someRondomDate.calendar(anotherRandomDate, {
    sameDay: '[Today]'})=='Today');
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
另一答案

如果我们想要没有时间的差异你可以使用时刻的格式得到不同的日期(只有没有时间的日期),如下所示。

因为,我在做的时候面临着与众不同的问题;

moment().diff([YOUR DATE])

所以,想出了以下内容;

const dateValidate = moment(moment().format('YYYY-MM-DD')).diff(moment([YOUR SELECTED DATE HERE]).format('YYYY-MM-DD'))

IF dateValidate > 0 
   //it's past day
else
   //it's current or future

如果有什么需要改进的话,请随时评论。

谢谢,

另一答案

你可以使用isSame函数:

var iscurrentDate = startTime.isSame(new Date(), "day");
if(iscurrentDate) {

}
另一答案
// Returns true if it is today or false if it's not
moment(SpecialToDate).isSame(moment(), 'day');
另一答案

你可以使用momentjs的isAfter()查询功能:

检查片刻是否在另一个时刻之后。

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

http://momentjs.com/docs/#/query/is-after/

另一答案

由于似乎没有人提及它,检查Moment日期对象是否过去的最简单方法是:

momentObj.isBefore()

或者将来:

momentObj.isAfter()

只需将args留空即可 - 现在默认为。

还有isSameOrAfterisSameOrBefore

注:这个因素及时。如果您只关心这一天,请参阅Dipendu's answer

另一答案

反转isBefore方法,以检查日期是否与今天或将来相同,如下所示:

!moment(yourDate).isBefore(moment(), "day");
另一答案

要检查它是否是今天:

如果我们比较两个日期,其中也包含时间信息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 
另一答案

如果您只需要知道哪一个更大,您也可以直接比较它们:

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

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

希望这可以帮助!

另一答案

如果其他人需要这个,请执行以下操作:

以上是关于Moment JS - 检查日期是今天还是将来的主要内容,如果未能解决你的问题,请参考以下文章

Diff 不是 Moment.js 中的函数

检查日期是过去还是将来

使用 Moment.js 格式化日期并减去天数

Moment.js - 我如何获得自日期以来的年数,而不是四舍五入?

moment.js 快捷查询

使用moment.js轻松管理日期和时间