2015-11-03 27 views

回答

0

對我來說,在Chrome 42.0上,toLocaleDateString的字符串輸出是「11/3/2015」。對於Internet Explorer 11.0.9,它是「2015年11月3日星期二」。您必須更改解析以讀取Internet Explorer輸出的格式,它具有您需要的所有信息,只需使用不同的格式。

+1

謝謝你的回覆John。 Internet Explorer也給我「11/3/2015」。我們如何處理這個問題,以便在每個瀏覽器中都能使用同一段代碼。 – dev

0

這不是一個錯誤。 IE的toLocaleDateString方法返回一個unicode字符串,你的代碼並不期待。例如,IE中的第一個字符(對於我和我的區域設置(en-US))是8206,它是從左到右的標記字符,這也是您的parseInt失敗的原因。整個序列是

8206,49,49,8206,47,8206,51,8206,47,8206,50,48,49,53 

這是14個字符長,看起來像「2015年11月3日」

你爲什麼不這樣做:

var dt=new Date(); 
var day=dt.day; 
var month=dt.month; 
var year=dt.year; 
+0

有沒有一種方法可以刪除或替換這些8206,因此其行爲與其他瀏覽器相同。謝謝。 – dev

+0

你可以輸出它很好。如果你想知道這個月,爲什麼你要將日期轉換爲一個字符串,然後試圖解析它? –

0

解決它像這樣

var day = arr[1]; 
var month = arr[0]; 
var year = arr[2]; 
if(isNaN(month)){ 
    var curr = ""; 
    for (var i = 0; i < month['length']; i++) { 
     if(!isNaN(month.charAt(i))) 
     curr += parseInt(month.charAt(i)); 
    } 
    month = curr; 
} 
console.log("month: "+parseInt(month,10)); 
+0

這隻有在系統格式設置爲短日期並且使用mm/dd/yyyy日期格式時纔有效。如果你想知道月份,只需詢問dt對象 - 'var month = dt.month;' –

2

這是IE11中的一個錯誤。你可以找到這個問題的臨時解決方案here

基本上你需要更換U + 200E(左對右標記)。

console.log((new Date()).toLocaleDateString().replace(/\u200E/g, '')); 
相關問題