2008-10-02 28 views
29

我有一個問題 -的Javascript Date()構造不工作

的JavaScript Date("mm-dd-yyyy")構造函數不爲FF工作。它適用於IE。

  • IE:new Date("04-02-2008") =>"Wed Apr 2 00:00:00 EDT 2008"
  • FF2:new Date("04-02-2008") =>Invalid Date

所以讓我們嘗試另一個構造。試圖此構造Date("yyyy", "mm", "dd")

  • IE:new Date("2008", "04", "02"); =>"Fri May 2 00:00:00 EDT 2008"
  • FF:new Date("2008", "04", "02"); =>"Fri May 2 00:00:00 EDT 2008"
  • IE:new Date("2008", "03", "02"); =>"Wed Apr 2 00:00:00 EDT 2008"
  • FF:new Date("2008", "03", "02"); =>"Wed Apr 2 00:00:00 EDT 2008"

所以Date("yyyy", "mm", "dd")構造函數使用inde 0的x代表1月份。

有沒有人處理過這個?
必須有比從月份中減去1更好的方法。

回答

44

definition of the Date objectmonth字段使用值0-11。

我相信使用String的構造函數是依賴於系統的(更不用說區域設置/時區相關),因此您可能最好使用指定年/月/日作爲單獨參數的構造函數。

順便說一句,在Firefox,

new Date("04/02/2008"); 

爲我工作得很好 - 它會解釋斜槓,而不是連字符。我認爲這證明了我的觀點,即使用String來構造Date對象是有困難的。改爲使用月/日/年的明確值:

new Date(2008, 3, 2); 
1

你說的很對,每月表示爲一個指數,因此一月份爲月數0,十二月份爲每月11號...

- 並沒有變通方法,因爲它明確規定在ECMA腳本定義,但簡單的技巧通常會工作:

var myDate = "2008,03,02".split(","); 
var theDate = new Date(myDate[0],myDate[1]-1,myDate[2]); 
alert(theDate); 
17

好的技巧的確,我剛剛發現了艱辛的道路(由思通的話)。 但我用更自然的日期字符串連字符:-)

var myDateArray = "2008-03-02".split("-"); 
var theDate = new Date(myDateArray[0],myDateArray[1]-1,myDateArray[2]); 
alert(theDate); 
3

使用

var theDate = new Date(myDate[0],myDate[1]-1,myDate[2]); 

是好的,但它顯示了一些奇怪的行爲時,月和日值是錯誤的。

嘗試投射一個日期,其中myDate[1]-1myDate[2]的值都是55.儘管輸入​​顯然不正確,但Javascript仍會返回日期。

我會首選javascript在這種情況下返回錯誤。

2

@Frank:你說得對。當您需要驗證日期時,

var theDate = new Date(myDate[0],myDate[1]-1,myDate[2]); 

將不起作用。

會發生什麼是它不斷添加額外的參數。例如:

new Date("2012", "11", "57") // Date {Sat Jan 26 2013 00:00:00 GMT+0530 (IST)} 

日期對象需要額外的日子(57-31 = 26)並將其添加到我們創建的日期。

或者,如果我們嘗試構建日期對象,具有:

new Date("2012", "11", "57", "57") //Date {Mon Jan 28 2013 09:00:00 GMT+0530 (IST)} 

一個額外的2天,9小時(57 = 24 + 24 + 9)加入。