Comment comparer uniquement la date dans moment.js

107

Je suis nouveau sur moment.js. J'ai un objet de date et il y a un certain temps qui lui est associé. Je veux juste vérifier si cette date est supérieure ou égale à la date du jour, à l' exclusion de l'heure lors de la comparaison.

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

Je veux juste vérifier si dateToCompare est égal ou supérieur à la date d'aujourd'hui. J'ai vérifié isSame of moment.js, mais il semble prendre de la chaîne et uniquement la partie date. Mais je ne veux pas convertir ma date en chaîne ou la manipuler davantage. Parce que je crains que javascript puisse faire quelque chose d'inattendu lors de la conversion de cette date en chaîne (comme ajouter le décalage ou le dst, etc.), ou peut-être que je me trompe.

Exemple de isSame () à partir de documents

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

Aussi je cherche quelque chose comme isSame () et isAfter () combinés en une seule déclaration.

Je dois comparer uniquement en utilisant moment.js.Veuillez ne pas suggérer de comparaison de dates javascript.

NoobGeek
la source

Réponses:

183

Les documents indiquent clairement que vous passez un deuxième paramètre pour spécifier la granularité.

Si vous souhaitez limiter la granularité à une unité autre que les millisecondes, transmettez les unités comme deuxième paramètre.

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

Comme le deuxième paramètre détermine la précision, et pas seulement une valeur unique à vérifier, l'utilisation de day vérifiera l'année, le mois et le jour.

Pour votre cas, vous passeriez 'day'comme deuxième paramètre.

zzzzBov
la source
1
Merci! semble que je n'ai pas à convertir en chaîne. Mais avons-nous une méthode commune pour isSame () et isAfter ()
NoobGeek
2
J'ai déjà utilisé cela. Merci! voulait juste voir s'il y avait une fonction commune, non pas qu'il soit difficile d'utiliser les deux.
NoobGeek
@kabirbaidhya, avant d'effectuer d'importantes modifications non sollicitées, il est considéré comme poli de publier un commentaire sur les questions et réponses en notant les problèmes. Je ne pense pas que les modifications que vous avez apportées étaient nécessaires, alors je les ai annulées. Si vous pensez que l'information était importante, veuillez envisager de publier votre propre réponse.
zzzzBov
4
Juste pour compléter: "Comme le deuxième paramètre détermine la précision, et pas seulement une valeur unique à vérifier, l'utilisation du jour vérifie l'année, le mois et le jour."
eveevans le
6
@NoobGeek Il y a maintenant isSameOrBefore () et isSameOrAfter () à partir de la version 2.10.7.
WhiteHotLoveTiger
6

Dans mon cas, j'ai suivi le code pour comparer 2 dates, cela peut vous aider ...

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>

Renish Gotecha
la source
6

Vous pouvez utiliser une startOf('day')méthode pour comparer uniquement la date

Exemple :

var dateToCompare = moment("06/04/2015 18:30:00");
var today = moment(new Date());

dateToCompare.startOf('day').isSame(today.startOf('day'));
Anurag Aron Tigga
la source