瞬间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
要检查是否是今天 :
如果我们比较两个包含时间信息isSame
date显然会失败。 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
如果有什么需要改进的地方,请随时发表评论。
谢谢,