2013-10-14 37 views
4

當使用max和min方法比較兩個MomentJS對象時,我遇到了一個奇怪的結果。他們似乎返回了錯誤的價值。 例如,下面的代碼返回的今天,而不是明天:MomentJS最大和最小返回錯誤值

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

http://jsfiddle.net/cGtbY/

任何人都可以解釋這種現象?

+3

任何人都仰視這個問題應該注意到,moment.js 2.7.0+有一個新的[最大功能](http://momentjs.com/docs/#/get-set/max/),其功能類似於'Math.max'。 –

回答

0

在尋找MomentJS 2.2.1的源代碼後,這裏的MAX()的源代碼:

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

好像他們正在返回thisother晚..奇怪..

+0

看起來你是對的,Ephi。我在Github上爲此打開了一個問題。 – yarons

2

你誤解了minmax的含義。

從測試套件(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()

.max功能,因此是數值最小的(選擇早些時候)

+0

我在http://momentjs.com/docs/#/manipulating/max/上解釋文檔,而不是在使用代碼時進行測試。它明確指出max將返回時刻的後面。從我在Github中打開的問題中,我發現他們認爲它是文檔中的一個錯誤,但它仍然是一個問題,並且仍然違反直覺。但kuddos投下我的問題和Ephi的答案。這證明你更清楚。 – yarons

+0

如果'a.max(b)<= b',我真的不明白'min()'和'max()'是什麼意思。 這種情況下max的用法是什麼? –

+0

@yarons最大讀數的文檔'這最終顯示人性化的字符串,比如「在幾秒鐘內」而不是「幾秒鐘前」。你可以用#max()這個時刻阻止它,這很明顯意味着max返回的是更早的日期而不是更晚的日期。 – SheetJS