如何只比较moment.js中的日期


107

我是moment.js的新手。我有一个日期对象,它有一些时间与之关联。我只想检查该日期是否大于或等于今天的日期,不包括比较时的时间。

 var dateToCompare = 2015-04-06T18:30:00.000Z

我只想检查dateToCompare是否等于或大于今天的日期。我已经检查了isSame of moment.js,但似乎需要输入字符串,并且只包含日期部分。但是我不想将日期转换为字符串或进一步操作。因为我担心javascript将日期转换为字符串时可能会做一些意外的事情(例如添加偏移量或dst等),否则可能是我错了。

来自文档的样本isSame()

moment('2010-10-20').isSame('2010-10-20');

我也在寻找像isSame()和isAfter()这样的东西结合在一起作为一个语句。

我只需要使用moment.js进行比较。请不要建议简单的javascript日期比较。

Answers:


183

文档非常清楚,您传入了第二个参数来指定粒度。

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

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

由于第二个参数确定精度,而不仅仅是要检查的单个值,因此使用day将检查年,月和日。

对于您的情况,您将'day'作为第二个参数传递。


1
谢谢!好像我不必转换为字符串。但是,对于isSame()和isAfter(),我们是否有任何常用方法
NoobGeek 2015年

2
我已经用过了。谢谢!只是想看看是否有一个通用功能,而不是很难同时使用两者。
NoobGeek 2015年

@kabirbaidhya,在进行大量未经请求的编辑之前,对问题发表评论并指出问题是有礼貌的。我认为您所做的编辑不是必需的,因此我回滚了它们。如果您认为该信息很重要,请考虑发布您自己的答案。
zzzzBov

4
只是为了补充:“由于第二个参数确定精度,而不仅仅是要检查的单个值,因此使用day可以检查年,月和日。”
eveevans's

6
@NoobGeek从版本2.10.7开始,现在有isSameOrBefore()和isSameOrAfter()。
WhiteHotLoveTiger


6

就我而言,我做了下面的代码来比较两个日期,这可能会帮助您...

var date1 = "2010-10-20";
var date2 = "2010-10-20";
var time1 = moment(date1).format('YYYY-MM-DD');
var time2 = moment(date2).format('YYYY-MM-DD');
if(time2 > time1){
	console.log('date2 is Greter than date1');
}else if(time2 > time1){
	console.log('date2 is Less than date1');
}else{
	console.log('Both date are same');
}
<script src="https://momentjs.com/downloads/moment.js"></script>


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.