2015-02-04 35 views
0

我在Moment JS NPM中遇到了一些問題。我過去的日期設定爲1月31日進行測試。它從今天的日期返回爲1。看看我的代碼和截圖如下:Moment JS返回不正確的值

var tz = -5, 
    thisYear = moment().utc(tz).year(), 
// plus one because Moment starts month at 0 
    thisMonth = moment().utc(tz).month() + 1, 
    today = moment().utc(tz).date(), 
    thisHour = moment().utc(tz).hour(), 
    start = moment([2015, 1, 31, 15]), 
    now = moment([thisYear, thisMonth, today, thisHour]), 
    daysPast = now.diff(start, 'days'); 

console.log(thisYear, thisMonth, today, thisHour); 
console.log(2015, 1, 31, 15); 
console.log(daysPast); 

這就是在控制檯被退回:

enter image description here

當我將日期更改爲第一年2月,它正確返回:

enter image description here

任何人有,爲什麼瞬間被錯誤地與p返回任何想法一個月嗎?

回答

1

只是爲了澄清zerkms答案,那就是你有:

thisMonth = moment().utc(tz).month() + 1, 

要設置thisMonth的 2(如果在二月運行),那麼當你這樣做:

start = moment([2015, 1, 31, 15]), 

要創建31二月不3存在這樣一個日期三月日期被建造。

然後,當你這樣做:

now = moment([thisYear, thisMonth, today, thisHour]), 

記住,你加一thisMonth的,所以它創造了3月4日的日期,而不是2月4日(即2月號創建三月日期)。

3月3日和3月4日之間的差異是一天。

+0

這是有道理的。任何解決方案的想法?如果我放棄加1?編輯....沒有工作。 LOLZ! –

+0

是的。您爲了方便人類而增加月份編號,但不要恢復用於Date的值。 – RobG

+0

好的,我做到了。我把用戶輸入日期和月份減一。現在看來,這個日期並不是第31次,但我會在第31次回去測試時告訴你它是否有效。再次感謝。 –

4

在JS個月從0開始,所以2015, 1, 31 == 31st of February

這被解釋爲March, 3rd它的背後是March, 4th

如果你想和日期操縱恰好一天 - 使用相應的momentjs方法,而不是:http://momentjs.com/docs/#/manipulating/

+0

我明白,但我加1的時刻()月價值。因此Jan將是零,但是我加了一個。它正在爲2月份工作。你可以在第二個截圖中看到。 –

+2

@MaxBaldwin在第二張截圖中,你沒有二月,但三月。 「但是我在當前()月份的值上加1」---不,你不知道。您只需增加月份值。從'0'到'1'。你不能只在一個月內添加一個任意數字,並期望它能夠工作,因爲這個原因:二月份只有28天。如果你想操作日期 - 使用相應的方法:http://momentjs.com/docs/#/manipulating/ – zerkms