IE 11使用JavaScript的toLocaleDateString()格式化存在问题

3
我正在使用JavaScript的Date函数toLocaleDateString()来格式化我的日期,使其看起来像8/13/2014,但是当我尝试通过API调用发送此值时,通过JSON.stringify然后AJAX该值,IE会将实际值更改为?8?/?30?/?2014..这显然会导致后端错误。为什么IE会这样做,我该如何解决?

看起来你遇到了一些字符编码问题。确切的问题很难说;请确保你的页面、服务器和数据库都同意使用哪种字符编码。 - Pointy
是的,我一直在看头文件,Content-Type 是 application/json; charset=utf-8。我们使用 JSON.stringify 因为我们有一个使用 JSON 解序器将 JSON 映射到类的 ASP .NET 后端。 - Matt Hintzke
1
页面必须设置为utf-8,而不仅仅是ajax。 - dandavis
它已经设置为 utf-8。 - Matt Hintzke
1
目前我的唯一解决方案是将所有日期转换为mm/dd/yyyy格式,这将使8/13/2014变成08/13/2014...这是一个解决方法,但仍然无法回答为什么首先会发生这种情况的问题。 - Matt Hintzke
显示剩余2条评论
2个回答

4

看起来这是IE 11引入的一个bug。IE 11使用Unicode字符,所以你看到的是U+200E 'LEFT-TO-RIGHT MARK'

作为解决此问题的临时解决方案,您可以替换该字符。像这样:

console.log((new Date()).toLocaleDateString().replace(/\u200E/g, ''));

0

你应该在这里查看答案: ToLocaleDateString() changes in IE11

你不应该使用旨在为本地特定人类显示格式化某些内容的函数,并期望输出可被机器解析。toLocaleString、toLocaleDateString 或 toLocaleTimeString 的任何输出都仅用于人类可读的显示。(如Bergi在评论中澄清的那样,toString 也是用于人类显示的,但ECMA §15.9.4.2 表示它应该往返)

虽然该函数返回一个字符串,但它只适用于人类阅读,从不适合机器解析。我不确定它在IE中是什么编码,但尽管它看起来像一个字符串,在底层它使用了不同的编码。

对于日期格式化,您可以使用 Moment.js,或者编写自己的格式化函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接