Сравнение Moment.js всегда возвращает false - PullRequest
0 голосов
/ 13 декабря 2018

Я борюсь со странной проблемой, но давайте сначала поговорим о том, чего я пытаюсь достичь.Я разрабатываю средство выбора даты и времени, и теперь я застрял в той части, где вы проверяете, находится ли первое значение (из) после второго значения (до).Я использую moment.js, который работает просто отлично ... за исключением трех запросов: isBefore, isAfter и isSame.

Мой код выглядит так if(moment(from).isAfter(to)) { ... } и возвращает false.На самом деле я пошел дальше с тестами и проверил все / наиболее возможные комбинации.Вот вывод:

EARLY  equals  "31.12.2018 11:00"
LATE   equals  "01.12.2018 10:00"

LATE   is before   EARLY  =  false   (should equal true)
EARLY  is after    LATE   =  false   (should equal true)
LATE   is after    EARLY  =  false
EARLY  is before   LATE   =  false
EARLY  is same as  LATE   =  false
LATE   is same as  EARLY  =  false

Я понятия не имею, в чем может быть проблема.Я на 100% уверен, что обе эти переменные являются строками, и я анализирую обе из них как moment(), и я даже могу программно добавлять и вычитать дни, месяцы и т. Д. Без каких-либо ошибок.

Был долгий день, пытаясь сравнить две чертовы даты.Теперь я надеюсь, что сообщество будет умнее меня!: D

1 Ответ

0 голосов
/ 13 декабря 2018

Цитировать moment.js документы :

Следующий возврат false:

  • invalid.isAfter(another)
  • invalid.isAfter(invalid)
  • another.isAfter(invalid)
  • invalid.isBefore(another)
  • invalid.isBefore(invalid)
  • another.isBefore(invalid)

Скорее всего, одна (или обе) ваши даты недействительны (или неверны).

Я предполагаю, что вы неправильно анализируете свои даты. Документы предлагают использовать формат String + для нестандартных форматов даты.

const incorrect = '31.12.2017 11:00';
console.log(moment(incorrect)); // invalid date

const correct = '31.12.2017 11:00';
console.log(moment(correct, 'DD.MM.YYYY HH:mm')); // valid date
...