Как сравнить только дату в moment.js

108

Я новичок в 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.

NoobGeek
источник

Ответы:

183

В документации довольно ясно, что вы передаете второй параметр, чтобы указать степень детализации.

Если вы хотите ограничить степень детализации единицей, отличной от миллисекунд, передайте единицы в качестве второго параметра.

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

Поскольку второй параметр определяет точность, а не только одно значение для проверки, использование дня будет проверять год, месяц и день.

В вашем случае вы должны передать 'day'второй параметр.

zzzzBov
источник
1
Спасибо! похоже, что мне не нужно преобразовывать в строку. Но есть ли у нас какие-либо общие методы для isSame () и isAfter ()
NoobGeek
2
Я уже использовал это. Спасибо! просто хотел посмотреть, есть ли общая функция, а не то, что использовать обе сложно.
NoobGeek
@kabirbaidhya, прежде чем вносить существенные изменения без запроса, считается вежливым оставлять комментарии к вопросам и отвечать на них с указанием проблем. Я не считаю, что внесенные вами правки были необходимы, поэтому я откатил их. Если вы считаете, что информация важна, рассмотрите возможность публикации собственного ответа.
zzzzBov
4
Просто в качестве дополнения: «Поскольку второй параметр определяет точность, а не только одно значение, которое нужно проверить, использование дня будет проверять год, месяц и день».
eveevans 02
6
@NoobGeek Теперь есть isSameOrBefore () и isSameOrAfter (), начиная с версии 2.10.7.
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>

Рениш Готеча
источник
6

Вы можете использовать startOf('day')метод для сравнения только даты

Пример :

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

dateToCompare.startOf('day').isSame(today.startOf('day'));
Анураг Арон Тигга
источник