带参数的新日期 - IE11
new Date with param - IE11
我有一个函数可以将具有特定格式的日期字符串转换为 JS 日期对象:
// param userInputBirthdate is a string with this format `dd.mm.yyyy`
function dateObjFromCHString(userInputBirthdate){
var paramDate = userInputBirthdate.split('.').reverse().join('-');
return new Date(paramDate);
}
当用户填写birthDate输入时,调用该函数成功创建日期对象
但是现在在我的单元测试中,我用这段代码模拟了用户给的字符串(我因为个人原因必须这样计算日期,所以请不要建议简单地写字符串日期常量) :
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
我在 IE 中得到一个“Invalid Date
”(使用 IE11 边缘模式测试),但在 FF、Chrome 或 Opera 中一切正常...
谁能告诉我 IE 的问题是什么?
注意:我看到了关于此问题的其他 SO 线程以及对新日期参数使用格式 yyyy-mm-dd hh:mm:ss 的建议,但因为它适用于 new Date('2012-03-11')
,我想知道为什么单元测试代码不起作用。
我在这个问题的帮助下找到了问题:ToLocaleDateString() changes in IE11
如果您单独记录 tolocalDateString
结果的每个字符,您会看到在记录完整结果时未显示的字符。
例如:
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 库处理所有日期函数解决了这个问题。
我有一个函数可以将具有特定格式的日期字符串转换为 JS 日期对象:
// param userInputBirthdate is a string with this format `dd.mm.yyyy`
function dateObjFromCHString(userInputBirthdate){
var paramDate = userInputBirthdate.split('.').reverse().join('-');
return new Date(paramDate);
}
当用户填写birthDate输入时,调用该函数成功创建日期对象
但是现在在我的单元测试中,我用这段代码模拟了用户给的字符串(我因为个人原因必须这样计算日期,所以请不要建议简单地写字符串日期常量) :
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
我在 IE 中得到一个“Invalid Date
”(使用 IE11 边缘模式测试),但在 FF、Chrome 或 Opera 中一切正常...
谁能告诉我 IE 的问题是什么?
注意:我看到了关于此问题的其他 SO 线程以及对新日期参数使用格式 yyyy-mm-dd hh:mm:ss 的建议,但因为它适用于 new Date('2012-03-11')
,我想知道为什么单元测试代码不起作用。
我在这个问题的帮助下找到了问题:ToLocaleDateString() changes in IE11
如果您单独记录 tolocalDateString
结果的每个字符,您会看到在记录完整结果时未显示的字符。
例如:
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 库处理所有日期函数解决了这个问题。