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

Lat*_*san 201 momentjs

我试图用来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>
Run Code Online (Sandbox Code Playgroud)

该代码正在评估我的日期(2014年1月31日)作为过去的日期.

知道我做错了什么吗?

Gre*_*olf 278

使用isSame函数

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

}
Run Code Online (Sandbox Code Playgroud)

  • 它必须匹配年和月.时刻('2010-01-01').isSame('2011-01-01','month'); // false,不同年份时刻('2010-01-01').isSame('2010-02-01','day'); //假,月份不同 (11认同)
  • @Sharcoux这个问题是关于momentjs的,所以很明显它是一个moment对象。 (6认同)
  • 这甚至没有回答OP的问题……“今天还是将来”,“ startTime”是什么?日期对象没有`isSame`方法... (4认同)
  • 这也匹配年份和月份吗? (3认同)
  • 这个答案更有效。谢谢。 (3认同)

Aur*_*iot 181

阅读文档后:http://momentjs.com/docs/#/displaying/difference/,您必须将diff函数视为减号运算符.

                   // today < future (31/01/2014)
today.diff(future) // today - future < 0
future.diff(today) // future - today > 0
Run Code Online (Sandbox Code Playgroud)

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

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

moment().diff(SpecialTo, 'days') // -8 (days)
Run Code Online (Sandbox Code Playgroud)

  • 如果是不同的一天,这将不起作用,但差异不到24小时 (65认同)
  • `moment().diff(SpecialTo,'days')`就是我所需要的.谢谢. (5认同)
  • 不适合我.如果将来的日期是+1().差异(SpecialTo,'days')给我-0(负零) (3认同)
  • 今天并不意味着在接下来的24小时内.isSame是很好的解决方案. (2认同)

Aki*_*kis 139

// Returns true if it is today or false if it's not
moment(SpecialToDate).isSame(moment(), 'day');
Run Code Online (Sandbox Code Playgroud)


dba*_*sch 76

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

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

moment('2010-10-20').isAfter('2010-10-19'); // true
Run Code Online (Sandbox Code Playgroud)

如果要将粒度限制为毫秒以外的单位,请将单位作为第二个参数传递.

moment('2010-10-20').isAfter('2010-01-01', 'year'); // false

moment('2010-10-20').isAfter('2009-12-31', 'year'); // true
Run Code Online (Sandbox Code Playgroud)

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


mpe*_*pen 65

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

momentObj.isBefore()
Run Code Online (Sandbox Code Playgroud)

或者将来:

momentObj.isAfter()
Run Code Online (Sandbox Code Playgroud)

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

还有isSameOrAfterisSameOrBefore.

请注意这个因素.如果您只关心这一天,请参阅Dipendu的回答.

  • @Dancrumb再读一遍."如果没有任何事情传递给#isBefore,它将默认为当前时间." 我的例子中的'momentObj`是一个时刻日期的实例.文档专门讨论创建一个新实例(当前时间),然后在一个语句中检查它是否在过去.我**不是**建议你做'时刻().isBefore()`这完全没有意义 - 你为什么要检查*now*是否在过去(或未来)? (8认同)
  • 我认为这是最好的答案,简短、准确、有效。 (5认同)

Dip*_*aul 11

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

!moment(yourDate).isBefore(moment(), "day");
Run Code Online (Sandbox Code Playgroud)


Ema*_*rsa 8

要检查它是否是今天:

如果我们比较两个包含时间的日期,那么信息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
Run Code Online (Sandbox Code Playgroud)

我认为最好的方法,即使不是快而短,如下:

var isSame = date1.date() == date2.date() && date1.month() == date2.month() && date1.year() == date2.year()
Run Code Online (Sandbox Code Playgroud)

检查它是否在将来:

正如其他用户所建议的那样,该diff方法也有效.

var isFuture = now.diff(anotherDate) < 0 
Run Code Online (Sandbox Code Playgroud)


Fra*_*eau 8

以防万一其他人需要这样做,请执行以下操作:

const isToday = moment(0, "HH").diff(date, "days") == 0;
Run Code Online (Sandbox Code Playgroud)

或者如果您想要一个功能:

isToday = date => moment(0,"HH").diff(date, "days") == 0;
Run Code Online (Sandbox Code Playgroud)

日期是要检查的日期。

说明

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

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

更新资料

此后,我发现了isSame函数,我相信它是用于确定日期是否为今天的正确函数:

const isToday = moment(0, "HH").diff(date, "days") == 0;
Run Code Online (Sandbox Code Playgroud)


jsi*_*era 6

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

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');
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


Ali*_*avi 5

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

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


小智 5

我编写了一些函数来检查 Moment 类型的日期是否是过去的一天,作为功能性和自描述性函数。也许可以帮助某人。

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

function isItAfterToday(MomentDate: Moment) {
  return MomentDate.diff(moment(0, 'HH')) > 0;
}
Run Code Online (Sandbox Code Playgroud)