瞬间JS – 检查一个date是今天还是将来

我正在尝试使用momentjs来检查给定date是今天还是将来。

这是我迄今为止:

 <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> 

代码正在评估我的date(2014年1月31日)为过去的date。

任何想法我做错了什么?

在阅读文档: 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) 

使用isSamefunction

 var iscurrentDate = startTime.isSame(new Date(), "day"); if(iscurrentDate) { } 
 // Returns true if is today or false if it's not moment(SpecialToDate).isSame(moment(), 'day'); 

你可以使用isAfter()查询函数:

检查一会儿是否过了一会儿。

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

如果要将粒度限制为毫秒以外的单位,请将单位作为第二个parameter passing。

 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/

要检查是否是今天

如果我们比较两个包含时间信息isSamedate显然会失败。 diff将失败的情况下,这两个date跨越新的一天:

 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() 

要检查它是否在未来

正如其他用户所build议的那样, 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'); } 

希望这可以帮助!

使用最简单的一个来检查未来的date

 if(moment().diff(yourDate) >= 0) alert ("Past or current date"); else alert("It is a future date"); 

如果firstDate相同或之后(未来)secondDate 返回true否则返回false。 户田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; } 

反转isBefore方法检查一个date是否与今天或将来一样是这样的:

 !moment(yourDate).isBefore(moment(), "day"); 

select昨天来检查过去的日子,或不借助于moment().subtract(1, "day");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="downloads/moment.js"></script> <input type="date" id="theDate" onchange="myFunction()"> 
 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) 

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

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="ajax/libs/moment.js/2.18.1/moment.min.js"></script> 

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

因为,我在做这件事的时候遇到了问题。

 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 

如果有什么需要改进的地方,请随时发表评论。

谢谢,