Jak porównać tylko datę w pliku moment.js.

108

Jestem nowy w chwili.js. Mam obiekt daty i jest z nim związany jakiś czas. Chcę tylko sprawdzić, czy ta data jest większa lub równa dzisiejszej dacie, z wyłączeniem czasu podczas porównywania.

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

Chcę tylko sprawdzić, czy dateToCompare jest równa lub większa niż dzisiejsza data. Sprawdziłem isSte of moment.js, ale wydaje się, że bierze ciąg i tylko część daty. Ale nie chcę konwertować daty na ciąg znaków ani dalej nią manipulować. Ponieważ obawiam się, że javascript może zrobić coś nieoczekiwanego podczas konwersji tej daty na ciąg (np. Dodanie przesunięcia lub dst itp.), A może się mylę.

Przykład isSame () z dokumentacji

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

Szukam również czegoś takiego jak isSame () i isAfter () połączone jako jedna instrukcja.

Muszę porównać tylko przy użyciu momentu.js.Nie sugeruj prostego porównywania dat w języku JavaScript.

NoobGeek
źródło

Odpowiedzi:

183

Dokumentacja jest dość jasna , że przekazujesz drugi parametr, aby określić szczegółowość.

Jeśli chcesz ograniczyć szczegółowość do jednostki innej niż milisekundy, przekaż jednostki jako drugi parametr.

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

Ponieważ drugi parametr określa dokładność, a nie tylko pojedynczą wartość do sprawdzenia, użycie parametru day spowoduje sprawdzenie roku, miesiąca i dnia.

W twoim przypadku możesz podać 'day'jako drugi parametr.

zzzzBov
źródło
1
Dzięki! wygląda na to, że nie muszę konwertować na ciąg. Ale czy mamy jakąś wspólną metodę dla isSame () i isAfter ()
NoobGeek
2
Już to wykorzystałem. Dzięki! chciałem tylko sprawdzić, czy istnieje wspólna funkcja, a nie, że trudno jest używać obu.
NoobGeek
@kabirbaidhya, przed wprowadzeniem sporej ilości niezamówionych zmian, uprzejmie jest opublikowanie komentarza do pytań i odpowiedzi, w których występują problemy. Wydaje mi się, że wprowadzone przez Ciebie zmiany nie były konieczne, więc je wycofałem. Jeśli uważasz, że informacje były ważne, rozważ zamieszczenie własnej odpowiedzi.
zzzzBov
4
Aby uzupełnić: „Ponieważ drugi parametr określa dokładność, a nie tylko pojedynczą wartość do sprawdzenia, użycie parametru day spowoduje sprawdzenie roku, miesiąca i dnia”.
eveevans
6
@NoobGeek Istnieje teraz isSameOrBefore () i isSameOrAfter () od wersji 2.10.7.
WhiteHotLoveTiger
6

W moim przypadku zrobiłem następujący kod do porównania 2 dat, może to ci pomoże ...

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
źródło
6

Możesz użyć startOf('day')metody, aby porównać tylko datę

Przykład:

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

dateToCompare.startOf('day').isSame(today.startOf('day'));
Anurag Aron Tigga
źródło