IE 10+无法解析使用自己的date.prototype.toLocaleString生成的日期字符串
IE 10+ unable to parse the date strings produced with its own Date.prototype.toLocaleString
我正在使用Selenium测试AngularJS应用程序。在测试过程中的某个时刻,我想确保日期在可接受的范围内。当测试运行时,会发生类似的情况:
Date.parse(new Date().toLocaleString())
我之所以说"等价",是因为我自己并没有显式地调用toLocaleString()
,而是间接地解析toLocaleString()
的结果。当我在Firefox和Chrome上测试时,没有任何问题。这两个浏览器能够解析它们自己的日期字符串。
然而,在IE上,我总是得到NaN
。我发现,如果我查看MSDN文档并使用与toLocaleString()
生成的格式相同的字符串文字,就不会出现错误。例如,这是有效的:
Date.parse("6/9/2010 3:20 pm")
我不明白为什么当我输入一个文字时,它是有效的,但当我试图对toLocaleString()
的结果使用parse()
时,它失败了。
我在IE 10和IE 11中得到了那个错误,但在IE 9中没有。
我很清楚使用toLocaleString()
的问题,它如何根据用户偏好而变化,等等。在我的测试中,使用toLocaleString()
是非常正确的。
解决方案
删除IE在toLocaleString()
:输出中从左到右的标记
Date.parse(new Date().toLocaleString().replace(/'u200E/g, ''));
解释
问题是IE对toLocaleString()
的实现输出了从左到右的标记。让我们以问题中的文字字符串为例,看看我们从toLocaleString()
:中得到了什么
new Date(Date.parse("6/9/2010 3:20 pm")).toLocaleString()
> 6/9/2010 03:20:00 PM
让我们看看字符串的开头是什么:
new Date(Date.parse("6/9/2010 3:20 pm")).toLocaleString().charCodeAt(0)
> 8206
这是一个与十六进制200E
相对应的十进制数。这是从左到右的标记,混淆了parse()
函数。实际上,在字符串中的每个数字前后都有一整串。如果我们删除它们,那么IE就能够解析字符串。
相关文章:
- toLocaleDateString和toLocaleString方法不尊重机器时区
- JS toLocaleString始终显示货币符号,而不考虑区域设置
- What is toLocaleString()?
- JavaScript:Date 的 toString() 和 toLocaleString() 方法之间的区别
- toLocaleString()不会'无法在Safari浏览器中工作
- new Date().toLocaleString 在 Firefox 上不起作用
- JavaScript: toLocaleString() testing with jasmine
- JavaScript new Date().toLocaleString() length
- Date.toLocaleString 使用区域设置格式但不调整时区
- IE 10+无法解析使用自己的date.prototype.toLocaleString生成的日期字符串
- toLocaleString() for IE 8
- 解析由 parseInt() 和 toLocaleString Internet Explorer 返回的值时的 NaN
- 如何在javascript中使用toLocaleString()时匹配regExp
- Javascript toLocaleString未使用正确的格式
- Chrome时区选项设置为Date.toLocaleString()
- 国际化(数字格式设置“num.toLocaleString()”)不适用于chrome
- 如何根据区域设置将字符串转换为数字(与.toLocaleString相反)
- 如何设置toLocaleString的通用格式
- 带有自定义分隔符的Number.toLocaleString()
- can't format javascript timestamp string toLocaleString