2011-12-01 26 views

回答

9

不,這是反過來:你正在定義日期,就好像它在1月份一樣。

the documentation on Date()

- 整數值代表月份,開頭0 1月至11月進行。

您提供了12,因此它被視爲0(1月)。

如果您需要證明,請參閱modified version of the script, showing the whole date and time

+0

謝謝!!! OMG我是一個障礙,也注意到它輸出的第24條而不是第25條是因爲時間戳是00:00? – Baconbeastnz

+0

@Baconbeastnz:我相信這個特定的問題是由於以下原因:您創建的日期應該是當地時間,但是您正在輸出UTC日期。請參閱[包括小時數的UTC和當地時間的詳細結果](http://jsfiddle.net/3CpXz/12/)。它有幫助嗎? – Tadeck

+0

@Baconbeastnz:基本上你在東半球的某個地方,因爲那個UTC時間實際上更早(如果你可以這麼說的話)。 – Tadeck

2

十二月在日期對象中是11。你必須減去1才能使它索引0。

http://www.w3schools.com/jsref/jsref_getutcmonth.asp

+2

因爲它指向正確的方向(作爲@ Gabe的答案和我的),我會upvote你的答案,但我不會這樣做,因爲你引用的信息來源。有關詳細說明和原因,請參閱[W3Fools.com](http://w3fools.com/)。 – Tadeck

+0

它仍然是準確的:P – jzila

+0

不,我不相信:)請參閱[Date object docs](http://www.w3schools.com/jsref/jsref_obj_date.asp)和[JS Date對象教程](http: //www.w3schools.com/js/js_obj_date.asp) - **沒有**他們實際上提到'new Date()'應該給出以月份開頭的月份的月份(和'11' 12月)。鏈接你提供了只提供'getUTCMonth()'的正確值,而不是Date對象的構造函數。該鏈接甚至在其示例中具有'var month = new Array(12);',這不是一個好習慣。 W3Schools充滿了不準確:( – Tadeck

7

你注意到它打印2012的一年?問題在於它使用基於0的月份,所以它認爲今年的12月份實際上是明年的第0個月。換句話說,0是1月,11是12月,所以12月是明年1月。

您需要從人類可讀月減1:

var d = new Date(exploded[0], exploded[1] - 1, exploded[2]); 

如果我改變計劃,以這樣的:

var exploded = "2011-12-25".split('-'); 
var d = new Date(exploded[0], exploded[1] - 1, exploded[2]); 
document.write(d.toString()); 

它打印:Sun Dec 25 00:00:00 EST 2011

+0

即返回year2011 month11 day24這是錯誤的:/ – Baconbeastnz

+0

事實上,如果我修改它http://jsfiddle.net/3CpXz/,即使只是toString()失敗 – Baconbeastnz

+1

@Baconbeastnz這是因爲'getUTCMonth '也是0-11。試試:'「月」+(d.getUTCMonth()+ 1)' –