我有一个非常奇怪的错误/问题...... IE给我带来了悲伤......我无法理解我做错了什么...... IE的问题是IE11 ......
所以,基本上我有一个日期字符串,IE1 toLocaleDateString给了我(08/03/2017)....我需要一个字符串8/3/2017(Chrome如何给我fe)....所以我我要走得很远,只是为了确保我正在做好一切......
let date = new Date();
let dateStr = date.toLocaleDateString();
console.log("Date string:", dateStr);
let splitChar = '/';
let tokens = dateStr.split(splitChar);
let result = [];
for( let token of tokens){
console.log('token', token);
let t = token.replace(/\b(?:0*(0\.\d+)|0+)/g, '$1');
let n;
n = parseInt(t, 10);
console.log('----- stripped', t);
console.log('----- number', n);
if(typeof n === 'number'){
result.push(n);
console.log('----- ARRAY', result.toString());
}
};
LOG(IE11):
Date string: 08/03/2017
token 08
----- stripped 8
----- number NaN
----- ARRAY NaN
token 03
----- stripped 3
----- number NaN
----- ARRAY NaN,NaN
token 2017
----- stripped 2017
----- number NaN
----- ARRAY NaN,NaN,NaN
LOG(Chrome 40)
Date string: 3/8/2017
token 3
----- stripped 3
----- number 3
----- ARRAY 3
token 8
----- stripped 8
----- number 8
----- ARRAY 3,8
token 2017
----- stripped 2017
----- number 2017
----- ARRAY 3,8,2017
除了IE和Chrome解析不同标准的血腥月份...(IE美国和Chrome欧洲)..
出于某种原因,IE(11)中的parseInt(t,10)给出了NaN ... eventhough t显然是一个数字字符串......
如果我自己输入字符串...就像在
中一样let dateStr = "08/03/2017";
它适用于两种浏览器......
我认为唯一合理的原因是因为IE不会返回实际的数字字符,而是一些看起来像数字但实际上不是
的其他unicode字符编辑=========================================== ==
我正在检查从 toLocaleDateString()返回的字符的ascii代码
并且可疑,IE不提供实际的正常字符:
let ascii = function(a) { return a.charCodeAt(0); }
let date = new Date();
let dateStr = date.toLocaleDateString();
console.log("Date string", dateStr);
let splitChar = '/';
let tokens = dateStr.split(splitChar);
let result = [];
for( let token of tokens){
console.log('token', token);
let t = token.replace(/\b(?:0*(0\.\d+)|0+)/g, '$1');
let n;
n = parseInt(t, 10);
console.log('----- stripped', t);
console.log('charCode (t):', t.split('').map(ascii));
console.log('----- number', n);
if(typeof n === 'number'){
result.push(n);
console.log('----- ARRAY', result.toString());
}
};
IE给出:
Date string 08/03/2017
token 08
----- stripped 8
charCode (t): 8206,56,8206
"charCode (t):"
[
0: 8206,
1: 56,
2: 8206,
length: 3
]
----- number NaN
----- ARRAY NaN
token 03
----- stripped 3
charCode (t): 8206,51,8206
"charCode (t):"
[
0: 8206,
1: 51,
2: 8206,
length: 3
]
----- number NaN
----- ARRAY NaN,NaN
token 2017
----- stripped 2017
charCode (t): 8206,50,48,49,55
"charCode (t):"
[
0: 8206,
1: 50,
2: 48,
3: 49,
4: 55,
length: 5
]
----- number NaN
----- ARRAY NaN,NaN,NaN
而Chromne提供正常的ASCII码:
Date string 3/8/2017
token 3
----- stripped 3
charCode (t): [51]
----- number 3
----- ARRAY 3
token 8
----- stripped 8
charCode (t): [56]
----- number 8
----- ARRAY 3,8
token 2017
----- stripped 2017
charCode (t): [50, 48, 49, 55]
----- number 2017
----- ARRAY 3,8,2017
希望它有助于某人
答案 0 :(得分:0)
尝试使用构造函数创建Date
对象,该构造函数可以将每个日期部分作为单独的参数。
答案 1 :(得分:0)
如我的附录中所述,这是一个IE问题,它使用不同的unicode字符来表示日期字符串...所以isNumeric或toInt不起作用