2012-11-02 41 views
0

我有以下線,生成FF和Chrome有效的時間戳:IE9 Date對象處理

new Date('2012 11 2 00:00:00 GMT').getTime(); 

然而,在IE9中,我得到NaN的。爲了讓這條線能夠跨瀏覽器兼容,需要做什麼不同的事情?

+0

可能的重複[如何將字符串轉換爲日期時間格式規範在JavaScript?](http://stackoverflow.com/questions/476105/how-can-i-convert-string-to-datetime-with- format-specification-in-javascript) –

回答

1

您使用的日期格式應符合EMCAscript規範,只是Firefox和Chrome更容易理解分析。

格式應該是:

YYYY-MM-DDTHH:mm:ss.sssZ 

那麼試試這個:

new Date('2012-11-02T00:00:00.000Z').getTime() 

這將無法工作在舊版本的IE。如果您需要完全兼容性,請參閱其他答案。

+0

MDN不是權威,[ECMA-262](http://ecma-international.org/ecma-262/5.1/#sec-15.9.1.15)是。並非所有的瀏覽器都支持指定的ISO格式,而且這些格式不一致。更好地手動分析日期字符串。 – RobG

+0

ISO格式在較早版本的IE中失敗。手動解析日期是在廣泛使用的瀏覽器中獲得一致結果的唯一方法。 – RobG

+0

@RobG真的,但他在問題中說IE9。爲了清晰起見,我會添加一個註釋。 – loganfsmyth

1

將字符串轉換爲日期的唯一可靠方法是手動解析它。你可以使用一個庫,但是無論你使用什麼,你都必須知道這個格式,所以通常只需要自己做就可以了。

在「2012 11月2日00:00:00 GMT」(這是不符合ISO8601,因此分析是依賴於實現)的情況下,如果時區爲UTC總,你可以使用:

function stringToDate(s) { 
    var b = s.split(/\D/); 
    return new Date(Date.UTC(b[0], --b[1], b[2], b[3], b[4], b[5])); 
} 

生成的日期對象將根據客戶端的系統設置有一個時區偏移量,這應該是正確的,但可能不是。