2013-10-14 4 views
4

Я столкнулся с странным результатом при сравнении двух объектов MomentJS с использованием методов max и min. Кажется, они возвращают неправильное значение. Например, этот код возвращается сегодня, а не завтра:MomentJS max и min return неправильные значения

moment().max(moment().add(1, 'd')) 

http://jsfiddle.net/cGtbY/

Может кто-нибудь объяснить такое поведение?

+3

Любой глядя на этот вопрос следует принять к сведению, что moment.js 2.7.0+ имеет новая функция [max] (http://momentjs.com/docs/#/get-set/max/), которая работает аналогично 'Math.max'. –

ответ

0

После просмотра в исходном коде MomentJS 2.2.1, вот исходный код (макс):

max: function (other) { 
    other = moment.apply(null, arguments); 
    return other > this ? this : other; 
}, 

Кажется, что они возвращаются this когда other позже .. Weird ..

+0

Похоже, ты прав, Ефи. Я открыл для себя проблему в Github. – yarons

2

Вы неверно истолковываете значение min и max.

Из тестового набора (https://github.com/moment/moment/blob/develop/test/moment/min_max.js#L51):

equalMoment(test, now.max(future), now, "Now with the maximum of the future should be now"); 

Путь, чтобы понять смысл есть: a.max(b) <= b (не позднее, результат может быть вторая дата).

документация имеет четкую цитату:

Иногда, серверные часы не совсем синхронно с клиентскими часов. В результате получается очеловеченные строки, такие как «через несколько секунд», а не «несколько секунд назад». Вы можете предотвратить это с моментом # макс()

.max Таким образом, функция является числовой минимум (выбор ранее момента)

+0

Я интерпретировал документацию по адресу http://momentjs.com/docs/#/manipulating/max/, а не тест, когда использовал код. В нем явно указано, что max вернет более поздние моменты. Из проблемы, которую я открыл в Github, я понял, что они считают ее ошибкой в ​​документации, но она по-прежнему является проблемой и все еще противоречит интуиции. Но куддос проголосовал за мой вопрос и ответ Эфи. Это доказывает, что вы знаете лучше. – yarons

+0

Я действительно не понимаю, что означает 'min()' и 'max()', если 'a.max (b) <= b'. Каково использование max в этом случае? –

+0

@yarons Документация для max reads 'В результате получается очеловеченные строки, такие как «через несколько секунд», а не «несколько секунд назад». Вы можете предотвратить это с моментом # max() ', что явно означает, что max возвращает более раннюю, а не более позднюю дату. – SheetJS

Смежные вопросы