Странная вещь moment.js - PullRequest
       6

Странная вещь moment.js

0 голосов
/ 12 октября 2018

Итак, у меня был этот бит кода в операторе if следующим образом

if (!inTime || !moment(inTime).format('m') % 15 === 0) {
doSomething();
}

Передача inTime была 2018-10-11T20: 00: 25Z.по какой-то причине это условие было выполнено, и вызывался код в блоке if.После некоторой обработки я нашел два исправления этой проблемы следующим образом:

if (!inTime || !(moment(inTime).format('m') % 15 === 0)) {
doSomething();
}

* обратите внимание на парены после взрыва и после 0, или я мог сделать это

if (!inTime || !moment(inTime).minute() % 15 === 0) {
doSomething();
}

Мне было любопытноузнать, знает ли кто-нибудь, почему это происходит?

1 Ответ

0 голосов
/ 12 октября 2018

Выражение

!moment(inTime).format('m') % 15 === 0

интерпретируется так, как если бы оно было написано

((!moment(inTime).format('m')) % 15) === 0

Таким образом, его оценка продолжается, поскольку

  1. moment(inTime).format('m') дает строку«0»
  2. !moment(inTime).format('m') дает логическое значение false, поскольку «0» истинно
  3. ((!moment(inTime).format('m')) % 15) дает число 0 после того, как false преобразовано в число (0) и модуль вычисляется
  4. ((!moment(inTime).format('m')) % 15) === 0 дает true

tl; др. ! связывается очень плотно.

Так как выполучил строку даты ISO, может быть проще использовать собственный API даты:

if (!inTime || new Date(inTime).getMinutes() % 15 !== 0)
...