2015-03-25 43 views
0

我有一個函數的日期字符串轉換成具有特定格式轉換成JS Date對象:新的日期 - IE11

// param userInputBirthdate is a string with this format `dd.mm.yyyy` 
function dateObjFromCHString(userInputBirthdate){ 
    var paramDate = userInputBirthdate.split('.').reverse().join('-'); 
    return new Date(paramDate); 
} 

當用戶填寫的出生日期輸入,成功創建日期對象通過調用這個函數。

但現在在我的單元測試,我模擬用戶給出的字符串代碼(我要計算這樣的個人原因之日,所以請不建議簡單地寫一個字符串常量日期 ):

var localDateOptions = {month:'2-digit',year:'numeric',day:'2-digit'}; 
var today = new Date(); 
olderDate.setDate(today.getDate()-(25*365)); //25 years ago 
olderDate = olderDate.toLocaleDateString('fr-CH',localDateOptions).replace(/\//g,'.');//return something like 23.03.1985 

但現在,當我把它轉換與功能:

dateObjFromCHString(olderDate); //returns [date] Invalid Date in IE11 

我得到一個 「Invalid Date」 與IE瀏覽器(與IE11邊緣模式下測試),但一切都正常工作與FF,Chrome瀏覽器要麼Opera ... 有人可以告訴我什麼是IE的問題?

注:我看到了有關這個問題,使用格式YYYY-MM-DD HH的recommandation其他SO線程:mm:ss的新Date參數,但它與new Date('2012-03-11')的作品,我想知道爲什麼單元測試代碼不起作用。

回答

0

我發現這個問題的幫助問題:ToLocaleDateString() changes in IE11

如果你登錄的tolocalDateString結果的每一個字符separatly,你會看到有記錄的完整結果時不顯示未顯示的字符。

例:

var str=(new Date).toLocaleDateString(); 
for(var i=0;i<str.length;i++) 
console.log(i,str.charCodeAt(i),str.charAt(i)) 

將輸出類似這樣與IE11:

0 8206 ‎ 
1 49 1 
2 57 9 
3 8206 
‎4 46 . 
5 8206 ‎ 
6 48 0 
7 53 5 
8 8206 ‎ 
9 46 . 
10 8206 ‎ 
11 50 2 
12 48 0 
13 49 1 
14 53 5 

正如你可以看到有5個非可見字符(則charCode = 8206),將打破我轉化成日期從toLocaleDateString結果。

我解決了這個問題,使用了momentjs庫來處理我的單元測試中的所有日期函數。