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日)作为过去的日期。

知道我哪里做错了吗?

410512 次浏览

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

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

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');
}

希望这能有所帮助!

你可以使用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

< a href = " http://momentjs.com/docs/ /查询/后/ " > http://momentjs.com/docs/ /查询/后/ < / >

你可以使用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');

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

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

看看今天是不是:

如果比较两个同时包含时间信息的日期,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

选择yesterday在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()">

如果firstDate相同或在(future) secondDate之后还真否则返回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;
}
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)

invert is before方法检查日期是否与今天或未来相同,如下所示:

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

我想用它做别的事情,但最终发现了一个你可以尝试的技巧

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

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

谢谢,

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

momentObj.isBefore()

或者在未来:

momentObj.isAfter()

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

还有isSameOrAfterisSameOrBefore

注意,这是时间因素。如果你只关心日期,请参阅Dipendu的回答

更新

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;

其中日期是你想检查的日期。

解释

moment(0, "HH")返回今天的午夜。

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

检查以下内容:

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
}

最简单的答案是:

const firstDate = moment('2020/10/14'); // the date to be checked
const secondDate = moment('2020/10/15'); // the date to be checked


firstDate.startOf('day').diff(secondDate.startOf('day'), 'days'); // result = -1
secondDate.startOf('day').diff(firstDate.startOf('day'), 'days'); // result = 1

它将检查midnight值并返回准确的结果。当两个日期之间的时间差小于24小时时,它也会工作。

我写了函数,检查时刻类型的日期是否是经过的日子,作为函数和自描述函数。

function isItBeforeToday(MomentDate: Moment) {
return MomentDate.diff(moment(0, 'HH')) < 0;
}


function isItAfterToday(MomentDate: Moment) {
return MomentDate.diff(moment(0, 'HH')) > 0;
}