Nic*_*ick 6 javascript parseint internet-explorer-11
我想做一些相对简单的事情.我有这种格式的日期dd/MM/yyyy例如:
var newDate = "?11?/?06?/?2015";
Run Code Online (Sandbox Code Playgroud)
我想将它转换为约会.
此代码仅适用于Chrome和Firefox:
new Date(newDate)
Run Code Online (Sandbox Code Playgroud)
在IE11中,我得到了 Nan
所以我想这样做:
var parts = newDate.split("/");
var year = parts[2].trim();
var month = parts[1].trim();
var day = parts[0].trim();
var dt = new Date(Number(year), Number(month) - 1, Number(day));
Run Code Online (Sandbox Code Playgroud)
哪个应该有效,但我遇到了一个非常奇怪的错误.
如果您尝试此代码:
function myFunction() {
var newDate = "?11?/?06?/?2015";
var parts = newDate.split('/');
var year = parts[2].trim();
var a = year;
var b = Number(year);
var c = parseInt(year, 10);
var d = parts;
var n = a + "<br>" + b + "<br>" + c + "<br>" + d;
document.getElementById("demo").innerHTML = n;
}Run Code Online (Sandbox Code Playgroud)
<p>Click the button to see the parse error.</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>Run Code Online (Sandbox Code Playgroud)
然后在IE中它添加了一个神秘的角色,它打印出来ý2015并在chrome中打印出来?2015.
事实上,IE中部件的价值是:ý11ý,ý06ý,ý2015
在Chrome中:?11?,?06?,?2015
我无法理解这些神秘人物的来源!我原来的字符串就是"?11?/?06?/?2015"
似乎没有办法做一些如此简单的事情,比如从简单的字符串中解析整数.
小提琴不显示隐藏字符,但我相信他们仍然在那里,因为Number("2015")结果NaN,你可以清楚地看到这里
的任何想法?
字符串中确实隐藏了字符,经过调查后我发现它们是这样创建的:
var date = new Date();
var dateToSave = date.toLocaleDateString();
Run Code Online (Sandbox Code Playgroud)
但仅限于IE.
在Chrome或Firefox中,输出不包含U+200E从左到右的标记,但在IE中它确实存在!
删除toLocaleDateString()并更换它kendo.toString(selectedValue, "dd/MM/yyyy")解决了问题.
为了记录,我还尝试了moment.js和行:
moment(selectedValue).format("DD/MM/YYYY")但由于某些原因,在IE11中U+200E,在结果字符串的最开头有一个隐藏字符.
Sci*_*ter 12
我"?11?/?06?/?2015".split('').map(function(s){return s.charCodeAt(0)})在控制台中运行(获取Unicode值),发现了一些有趣的东西:[8206, 49, 49, 8206, 47, 8206, 48, 54, 8206, 47, 8206, 50, 48, 49, 53]
你那里有一个U + 200E从左到右的标记.我不知道它是怎么到达那里的.
删除它,你会没事的.
在这里,您可以复制并粘贴我的字符串:"11/06/2015".
Scimonster敏锐地发现了您的问题,并且dan解释了如何去除非ASCII字符,但是有一种更简单的方法:只需使用仅与数字匹配的正则表达式即可。这样,你就不必使用split或trim或带任何东西了:
function go() {
var newDate = "?11?/?06?/?2015";
var expr = /\d+/g;
var parts = newDate.match(expr);
document.getElementById("result").innerHTML =
"Parts: " + parts +
"<br>Year: " + parts[0] +
"<br>Month: " + parts[1] +
"<br>Day: " + parts[2];
}Run Code Online (Sandbox Code Playgroud)
<button onclick="go()">Try me</button>
<div id="result"/>Run Code Online (Sandbox Code Playgroud)
这将工作中的字符串是否是"?11?/?06?/?2015"或"11-6-2015"或junk11/06/2016junk。
| 归档时间: |
|
| 查看次数: |
1857 次 |
| 最近记录: |