Функция isBefore в момент js не работает - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь проверить, соответствует ли определенное время в ч: мм другому времени в том же формате. Однако консоль показывает мне либо сообщение об ошибке, что isBefore не является функцией, либо всегда выводит false. Я использую этот код в Ioni c 3 / Angular.

Если я кодирую следующим образом, консоль выводит false. Я пробовал разные аргументы вместо часа.

  var start_time = moment('20:00', 'h:mm').format('LT');
  var last_time = moment('21:59', 'h:mm').format('LT');
  var check_last = moment(start_time).isBefore(last_time, 'hour');
  console.log(check_last);

Если я кодирую следующим образом. Как можно найти по ссылке ниже. Консоль выдает мне ошибку:

  var start_time = moment('20:00', 'h:mm').format('LT');
  var last_time = moment('21:59', 'h:mm').format('LT');
  var check_last = start_time.isBefore(last_time, 'hour');
  console.log(check_last);

Момент. js Функция isBefore не работает должным образом

На официальном сайте в момент js Я не Не понимаю, как два раза сравнивать. Не могли бы вы оказать мне поддержку?

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

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

Если вы сохраняете время как объекты момента, то момент может сравнивать их точно. Отформатировать можно после сравнения. Вот пример:

var start_time = moment('20:00', 'h:mm');
var last_time = moment('21:59', 'h:mm');
var check_last = moment(start_time).isBefore(last_time, 'hour');
console.log(check_last);
// format at end
// return [
//   start_time.format('LT'),
//   last_time.format('LT'),
// ];
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.25.3/moment.min.js"></script>
0 голосов
/ 07 мая 2020

Moment format() возвращает строку, поэтому вы не можете использовать isBefore в чем-то вроде time.format ('hh: mm'), поэтому вы получение isBefore не является функцией.

Также, согласно самой документации, moment (). isBefore () имеет неопределенное поведение и не может использоваться! Если код работает быстро, начальный момент создания будет таким же, как и момент, созданный в isBefore для выполнения проверки, поэтому результат будет ложным.

Попробуйте без форматирования, чтобы получить желаемый результат.

var start_time = moment("20:00", "h:mm");
var last_time = moment("21:59", "h:mm");
var check_last = moment(start_time).isBefore(last_time, "hour");
console.log(check_last);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
...