2015-09-29 29 views
1

大家。我有一個錯誤,因爲它而合作。由於日期字符串格式,問題發生。在IE日期格式是MM-DD-YYYY,在Firefox上是YYYY-MM-DD。 Chrome可以同時使用這兩種格式,但是當我選擇其中一種格式時,其他瀏覽器會給我提供無效日期警告。Javascript新日期跨瀏覽器格式問題

我的代碼爲例(在IE的作品,但不是在Firefox):

var dateSTR = "2015-09-29"; 
    var date = new Date(dateSTR.replace(/(\d{4})-(\d{2})-(\d{2})/,"$2-$3-$1")); 
    date.setUTCHours(date.getHours()); 
    date.setUTCMinutes(date.getMinutes()); 
    return date.toLocaleDateString(); 

https://jsfiddle.net/kmmna8c0/

+0

我想找到沒有插件的解決方案。 –

+1

「在IE日期格式上是MM-DD-YYYY」是一個非常廣泛的陳述。那個「日期格式」是什麼方式? 'new Date(dateString)'的參數被記錄爲ISO-8601或RFC2822格式,所以我希望你能夠直接使用'dateSTR',而不用任何搞亂。 –

+1

[Javascript日期()構造函數可能重複不起作用](http://stackoverflow.com/questions/163563/javascript-date-constructor-doesnt-work) – CBroe

回答

1

我只看到toLocaleDateString差異 - 注:我在歐洲,所以只有FX正顯示出我我想要的

var dateSTR = "2015-09-29"; 
 
    var date = new Date(dateSTR.replace(/-/g,"/")); 
 

 
    console.log("0:"+ new Date("2015/09/29")) 
 
    console.log("1:"+date) 
 
    date.setUTCHours(date.getHours()); 
 
    console.log("2:"+date) 
 
    date.setUTCMinutes(date.getMinutes()); 
 
    console.log("3:"+date); 
 
    console.log("4:"+date.toLocaleDateString());

鉻:

0:Tue Sep 29 2015 00:00:00 GMT+0200 (W. Europe Daylight Time) 
1:Tue Sep 29 2015 00:00:00 GMT+0200 (W. Europe Daylight Time) 
2:Mon Sep 28 2015 02:00:00 GMT+0200 (W. Europe Daylight Time) 
3:Mon Sep 28 2015 02:00:00 GMT+0200 (W. Europe Daylight Time) 
4:9/28/2015 

IE10:

0:Tue Sep 29 00:00:00 UTC+0200 2015 
1:Tue Sep 29 00:00:00 UTC+0200 2015 
2:Mon Sep 28 02:00:00 UTC+0200 2015 
3:Mon Sep 28 02:00:00 UTC+0200 2015 
4:28 September 2015 

FX:

"0:Tue Sep 29 2015 00:00:00 GMT+0200" 
"1:Tue Sep 29 2015 00:00:00 GMT+0200" 
"2:Mon Sep 28 2015 02:00:00 GMT+0200" 
"3:Mon Sep 28 2015 02:00:00 GMT+0200" 
"4:28/09/2015" 
+1

謝謝你@mplungjan它完美的作品 –

2

該代碼將返回您在IE同日,Chrome和Firefox:

var dateSTR = "2015-09-29"; 
 
var dateArr = dateSTR.split("-"); 
 
var theDate = new Date(dateArr[0], dateArr[1]-1, dateArr[2]); 
 
alert(theDate);

1

I t似乎你想從預定義的字符串中創建一個Date對象(在你的例子中:「2015-09-29」)。

您可以使用以下方法:

var dateSTR = "2015-09-29"; 
var dateYear = 2015;   // create this from dateSTR 
var dateMonth = 8;   // create this from dateSTR (= month-1) 
var dateDay = 9;    // create this from dateSTR 

,然後使用:

var date = new Date(dateYear, dateMonth, dateDay); 

基礎上,解釋一下:http://www.w3schools.com/jsref/jsref_obj_date.asp

+0

感謝您的回答。該方法是否可用於日期時間? –

+0

是的,它也可以用於設置日期和時間。看看我連接的參考鏈接 –

1

斯普利特像這樣

var args = dateStr.split(/[-/]/); // Add any special characters if you need. 

和crea te date from it like this

var d = new Date(args[0], args[1] - 1, args[2]); 

那就是它。

+0

如果dateStr是「2015-09-29」,那麼這將給月份的十月... –

+0

@JonSkeet現在是什麼?對於那個小小的改變,它不值得投票 – Exception

+1

爲什麼不呢?它自信地(「就是這樣」)提供了一個無效的答案。我會說這使答案「無用」,這是downvote按鈕的工具提示......特別是因爲光纖在10分鐘前已經提供了類似的*工作*代碼。現在我已經刪除了已經修復的downvote,但我認爲完全合理的做法是減少破解的答案。 –