2012-07-19 51 views

回答

5

我想你的意思是這些:

new Date('2012 01 01'); 
new Date(2012, 01, 01); // Note the commas 

其原因是,上面的第二個示例使用the version of the Date constructor接受的數字,而不是字符串,並在JavaScript月份數字以0 = 1月份開始提供。所以new Date(2012, 1, 1)(領導0在你的例子在技術上是一個錯誤,但大多數引擎允許它和治療爲八進制數)爲月1日 2012年

第一個版本以上使用Date constructor that takes a string並解析它,而當解析日期字符串,月份數字通常以1 = 1開頭。請注意,您要求Chrome解析的字符串不是由規範定義的任何格式,其他引擎可能不會解析它。事實上,直到ECMAScript 5,有沒有定義日期字符串格式(接受字符串的Date構造函數被定義爲接受任何toString輸出,但都沒有被實際指定)。 ECMAScript 5增加了ISO-8601的簡化版本。但在野外,過去十年中的每個引擎都支持yyyy/mm/dd格式的日期字符串(但不一定是現在指定的yyyy-mm-dd)。

+0

「領先的0在技術上是一個錯誤」---這聽起來很奇怪。 ECMAscript是否將非零正數定義爲'+?[1-9] \ d *'之類的東西? – zerkms 2012-07-19 22:23:56

+2

@zerkms:'0'是JavaScript中的有效十進制數,'01'不是。數字文字只能以'0'開始,如果它是'0',或者'0'後面是'x',其餘的是十六進制。 [規範的第7.8.3節](http://ecma-international.org/ecma-262/5.1/#sec-7.8.3)涵蓋了這一點。許多JavaScript引擎擴展了JavaScript數字文字的定義,以允許前導零表示八進制(在B語言中,同一語法系列中的許多其他語言也這樣做),但它不是標準的,嚴格地嚴格禁止模式。 – 2012-07-19 22:26:48

+1

不錯,謝謝你的鏈接 – zerkms 2012-07-19 22:28:18

相關問題