gpt4 book ai didi

javascript - IE 10+ 无法解析用自己的 Date.prototype.toLocaleString 生成的日期字符串

转载 作者:搜寻专家 更新时间:2023-11-01 05:31:18 29 4
gpt4 key购买 nike

我正在使用 Selenium 测试 AngularJS 应用程序。在测试期间的某个时候,我想确保日期在可接受的范围内。当测试运行时,会发生与此等效的事情:

Date.parse(new Date().toLocaleString())

我说“等效”是因为我自己没有显式调用 toLocaleString(),而是间接解析 toLocaleString() 的结果。当我在 Firefox 和 Chrome 上测试时,没有任何问题。这两个浏览器能够解析自己的日期字符串。

但是,在 IE 上,我总是得到 NaN。我发现如果我看 MSDN documentation并使用与 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() 实现输出 left-to-right marks .让我们以问题中的文字字符串为例,看看我们用 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 就能够解析该字符串。

关于javascript - IE 10+ 无法解析用自己的 Date.prototype.toLocaleString 生成的日期字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26867970/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com