2009-10-08 173 views
0

我的本地設置:JavaScript格式日期奇怪

短日期格式:DD/MM/YYYY,長日期格式DD MMMM YYYY

那麼,爲什麼

var d = new Date("8/10/2009") 
alert(d.toLocaleDateString()); 

吐了8月10日2009年

var d = new Date("15/10/2009"); 

嘔吐2010年3月10日

回答

3

系統得到8月10日的日期應該是顯而易見的,即使你還沒有得到原因。但從「15/10/2009」開始,「2010年3月10日」的理解起來並不容易。所以如果你錯過了它:

假設一會兒Date對象已經決定使用「M/d/y」格式,所以第一部分(15)是月份。它將如何處理?會發生什麼是它從今年開始並建立日期「2009年1月1日」。然後進入第15個月,給你2010年3月。添加10天,你去了。

對於「爲什麼」,請注意,您必須致電toLocaleDateString()才能以特定區域設置格式輸出。但是你的new Date()在任何地方都沒有提到類似的區域設置。所以它只是使用它不變的內置文化。

+0

但是,如果我的語言環境日期格式是dd/mm/yyyy,我認爲新日期(「8/10/2009」)會在2009年10月8日輸出.tolocaleDateString()時調用(?) – user48408 2009-10-08 15:58:08

+0

new Date()單獨的表達式,並不關心你在其他地方使用過的LocaleDateString()。 – 2009-10-08 16:03:38

+1

如此新的日期()自動採用美國日期格式。有點種族歧視是不是 – user48408 2009-10-08 16:13:00

1

試試這個。

var myDate=new Date(); 
myDate.setFullYear(2010,0,14); 
+0

實際上我在做var myDate = new Date(el.value),所以這裏不是一個好的選擇。 – user48408 2009-10-08 15:59:04