Подтвердить что ты не робот

Сравнение времени использования Moment.js

Я играл с Moment.js, и я столкнулся с проблемой. Я пытаюсь определить, дана ли дата в прошлом или в будущем. Даты хранятся как отметки времени Unix. Поэтому, когда я сравниваю будущие даты с текущими датами, он работает нормально, но это не срабатывает для прошлых дат. Ниже приведен пример кода и скрипта здесь.

var pastUnixTime = '1348812970'; //some time in the past
var futureUnixTime = '1352350231';

if (moment.unix(futureUnixTime).format('DD MM YYYY') > moment().format('DD MM YYYY')) {
    console.log('yay');
}


if (moment.unix(pastUnixTime).format('DD MM YYYY') < moment().format('DD MM YYYY')) {
    console.log('yay 2');
}
​

В приведенных выше кодовых журналах yay не yay 2. Может ли кто-нибудь объяснить мне, почему это не протоколирование yay 2?

4b9b3361

Ответ 1

Вам вообще не нужно использовать .format() для этого.

Во-первых, метки времени должны быть числами, а не строками (например, var pastUnixTime = 1348812970;), а во-вторых, вы можете сравнить их напрямую:

> pastUnixTime = 1348812970;
> pastUnixTime < moment().unix()
true
> pastUnixTime > moment().unix() 
false

Теперь причина, по которой ваш код терпит неудачу, заключается в том, что когда вы сравниваете строки DD MM YYYY, их сравнивают лексикографически... И первые дни! Поэтому строка "01 01 2000" всегда будет "меньше" "31 12 1900". Если вы хотите сравнить строки, вы можете использовать формат YYYY MM DD - таким образом, "2000 01 01" будет правильно "больше" "1900 12 31". Но нет причин для этого - отметки времени намного более прямолинейны.

Наконец, примечание: вам действительно не нужно использовать .unix() - экземпляры moment() будут разумно сравнивать:

> past = moment().subtract("days", 1)
> now = moment()
> past < now
true
> past > now
false