2011-05-26 28 views
0

我注意到jQuery函數New Date()做了一些奇怪的事情。我已經找到了解決這個問題的方法,所以我不需要幫助。我只是想明白爲什麼這樣做。函數「新日期()」做些奇怪的事情

我有一個函數執行以下操作:

new Date(parseInt(y),parseInt(m)-1,parseInt(d)) 

實際的數字是:y= '2011', m= '07', d='01'。這工作正常,它返回日期2011年7月7日。但是,當我使用m= '08'它返回「Wed Dec 01 2010」

我跟蹤到parseInt函數。不知何故parseInt('07') = 7parseInt('08') = 0 有誰知道爲什麼會發生這種情況?

+2

「jQuery函數新的日期()」 ........ **/facedesk ** – Matt 2011-05-26 08:48:27

+1

[Workarounds for JavaScript parseInt八進制錯誤]的可能重複(http://stackoverflow.com/questions/850341/workarounds-for-javascript-parseint-octal-bug ) – Matt 2011-05-26 08:49:47

回答

2

First New Date()不是一個jQuery函數,而是純JavaScript。

不幸的是,JavaScript從C語言中借了很多,在C語言中,通過在其前面加上零來編寫八進制數字。八進制數字是從0到7的數字。

你必須做什麼,最好的做法是說你有小數,而不是八進制。

總是給人基數形式:parseInt(Y,10),所以你的代碼是:

new Date(parseInt(y, 10),parseInt(m, 10)-1,parseInt(d, 10)) 

更多parseInt函數信息:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt

+0

謝謝,這解釋了很多 – gen 2011-05-26 09:01:39

5

嘗試new Date(parseInt(y,10),parseInt(m,10)-1,parseInt(d,10))

parseInt使用基座8,如果該字符串以零開始。