2014-03-19 75 views
1

所以我有以下字符串「2013年12月10日23時33分05秒」怪異的日期()解析錯誤

,當我在做的jsfiddle var d = new Date("2013-12-10 23:33:05");http://jsfiddle.net/38TuV/1/

d包含正確的對象,並沒有問題。

然而,在我的網站,當我做

var date = '2013-12-10 23:33:05'; 
var d = new Date(date); 

d是無效數據。什麼是奇怪的,如果你會看小提琴,我也做了同樣的副本作爲第二個例子,它似乎工作

這很奇怪,它可能是一些特定於我的網頁,但我記錄data,它打印'2013-12-10 23:33:05'所以我不知道...任何想法?

+0

我不知道是否有可能是開頭或結尾的數據可能會搞砸了? –

+0

您的網站上加載了哪些其他JavaScript資源? –

+0

nah沒有前導或尾隨數據我做console.log('|'+ date +'|')沒有結尾,我想它的一些插件,改變日期的工作 –

回答

1

如果你確定日期將是格式 'YYYY-MM-DD HH:MM:SS',嘗試這在Firefox

var date = '2013-12-10 23:33:05'.replace(' ', 'T'); 
var d = new Date(date); 
+0

另請參閱:http://stackoverflow.com/questions/3257460/new-date-is-working-in-chrome-but-not-firefox –

+0

不,不這樣做。手動解析日期字符串,有太多的問題可以將其保存到Date.parse中。 – RobG

+0

在Firefox和Chrome上嘗試上面的內容,可能會發現其中一種將其視爲UTC,另一種則不會。快樂的時光。 – RobG

0

您有在JSFiddle外部資源中定義的dateclass.js

我刪除它,它工作正常。 http://jsfiddle.net/38TuV/2/

我不知道你爲什麼擁有它,也許它是一個墊腳。無論如何,它沒有它在控制檯中也能正常工作。

使用鉻控制檯(控制移-J),它工作得很好:

var date = '2013-12-10 23:33:05'; 
var d = new Date(date); 
undefined // chromium console is printing the return value of the assignment, undef is OK 
date 
"2013-12-10 23:33:05" 
d 
Tue Dec 10 2013 23:33:05 GMT-0500 (EST) 
+0

是的,在小提琴中它的工作都很好,兩個例子..在我的網站,但它確實。我開始認爲它是一個插件或改變日期工作方式的東西。 –

+0

我有dataclass.js,因爲它有助於良好的格式和重量幾乎沒有。這個問題是與Firefox。鉻似乎能夠解析上面的字符串,而FF沒有。 –

1

ES5之前,通過Date.parse日期字符串的解析(其是與使用Date constructor解析)完全是依賴於實現的。 ES5爲兼容的實現引入了version of ISO 8601,但並非所有正在使用的瀏覽器都符合標準。

因此,解析字符串日期和時間值的最佳方法是自己解析它。隨着Date.parse的ES5版本的ISO 8601格式字符串,沒有時間區將被視爲UTC,所以:

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

parseUTCDateTime('2013-12-10 23:33:05'); // Wed 11 Dec 07:33:05 UTC+0800 2013