2012-07-06 10 views
4

我正在使用Javascript的Date對象將一個字符串解析爲毫秒時間戳。我使用的是Date.parse(),我解析的字符串格式如下:「2012-07-06 12:59:36-0600」如何在瀏覽器中一致地解析這個日期字符串?

Date.parse在Chrome中表現很好,解析進入我預期的正確時間戳。但是,當我通過Date.parse()運行字符串時,每個其他瀏覽器都會返回「NaN」。

我知道日期對象實現是瀏覽器特定的,但我想找到一個JavaScript解決方案,能夠解析任何瀏覽器的這種類型的字符串。有什麼我可以在JavaScript中使用的建議來實現這一點?

+0

分割份數的字符串,並使用相應的'Date.prototype.set *'方法或'Date'構造函數來得到一個'Date'實例。這裏有一個正則表達式:'/(\ d {4}) - (\ d {2}) - (\ d {2})\ s(\ d {2}):(\ d {2}): (\ d {2})([ - +] \ d {4})/'。 – 2012-07-06 19:16:34

回答

4

轉換的輸入有效ISO 8601

Date.parse("2012-07-06 12:59:36-0600".replace(' ', 'T')); 

這在Firefox的測試(和作品)。

注:

注意的是,雖然時區說明符日期字符串 解析正確解讀論證過程中使用,只要不影響 返回值,這是永遠的毫秒數 之間一月1,1970年00:00:00 UTC以及由 參數表示的時間點。

+0

感謝您的建議!這使得它在Firefox中工作,但不幸的是沒有在IE中工作。那裏有很大的驚喜,呃? :)我想我可能最終只能使用Date.js,即使它要加載更多的JS。 – dsw88 2012-07-06 19:58:09

+0

@ mustang2009cobra - 看看這個:https://github.com/csnover/js-iso8601/blob/master/iso8601.js – 2012-07-06 20:35:19

+0

而這個:http://stackoverflow.com/questions/5802461/javascript-這-browsers-support-parsing-of-iso-8601-date-string-with-date-par – 2012-07-06 20:36:22

0

你試過DateJS?也許你不想添加另一個庫,但它會解決你的交叉瀏覽器問題。

+0

DateJS似乎是一個古老的圖書館,但它適用於我需要的東西,所以我想我會使用它。任何想法,如果它仍然被支持?最新的版本看起來像是從2007年開始的,但我可能是錯誤的。 – dsw88 2012-07-06 19:58:34

+0

從Google Code回購看,2008年以來我沒有看到任何發展。不知道有什麼比較新的東西。 – davidethell 2012-07-06 21:02:01

1

如果格式是一致的,你可以自己分析它:

var date = "2012-07-06 12:59:36-0600"; 
function parseDatetime(input) { 
    var match = input.match(/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})([-+]\d{4})/); 
    match.shift(); // discard the "full match" index 
    match[2]--; 
    match[4] += parseInt(match[6],10); 
    return new Date(match[0],match[1],match[2],match[3],match[4],match[5]); 
} 
+0

您可能應該在發佈之前對其進行測試。回報中的所有指數應該增加1. – 2012-07-06 19:25:16

+0

即使如此,我認爲它不會正確處理時區。 – 2012-07-06 19:26:24

+0

糟糕。 - 修正 - 我相當肯定時區將是好的,如果我用在正確的地方(分鐘而不是幾小時) – 2012-07-06 19:30:26