Как правильно проверить, совпадает ли дата или более поздняя с помощью momentjs?

Я пытаюсь проверить поле, чтобы не было даты до сегодняшнего дня. Я использую MomentJS и следующие функции:

  • это действительная дата, и я использую isValid()
  • такой же, как сегодня или позже, и я использую isSameOrAfter()

Вот как я это делаю:

$("#btn").click(function(){
    const value = moment(new Date($('#field').val()), 'MM/DD/YYYY', true)
    console.log(value)
  
    //console.log(value.isValid() && value.isSameOrAfter(moment(new Date(), 'MM/DD/YYYY')))
    //console.log(value.isValid() && value.isSameOrAfter(moment()))
    console.log(value.isValid() && value.isSameOrAfter(moment(new Date())))
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

<input type="text" name="field" id="field" />
<button id="btn">Click Me</button>

Я не уверен, что мне здесь может не хватать, но, как вы можете видеть, это не работает, и я пробовал три разных способа (прокомментировал фрагмент выше).

Одна вещь, которую я заметил, это то, что объект moment() возвращает дату в формате TimeZone: 2018-08-10T04:00:00.000Z может ли это нарушить проверку?

Что мне здесь не хватает?

поскольку ваш стоимость - это начальная дата (00:00:00), вам нужно использовать момент (). startOf ('день')

gaetanoM 10.08.2018 15:38
3
1
136
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете указать степень детализации moment#isSameOrAfter, указав единицу детализации в качестве второго параметра:

const value = moment(new Date($('#field').val()), 'MM/DD/YYYY', true)
console.log(value.isValid() && value.isSameOrAfter(moment(new Date()), 'day'));

Допустимые единицы времени: yearmonthweekdayhourminutesecond. Без указания степени детализации для момента по умолчанию будут использоваться миллисекунды.

http://jsfiddle.net/dp7rzmw5/24211/

Но как насчет того, чтобы проверить 08/10/2015? Будет ли это подтверждено для isSameOrAfter?

ReynierPM 10.08.2018 15:18

Функция оценивает value, поэтому, если value совпадает с днем ​​или после параметра даты, переданного в moment#isSameOrAfter, она вернет true.

Bucket 10.08.2018 15:27

Другие вопросы по теме