我正在使用JavaScript的Date函数toLocaleDateString()来格式化我的日期,使其看起来像8/13/2014,但是当我尝试通过API调用发送此值时,通过JSON.stringify然后AJAX该值,IE会将实际值更改为?8?/?30?/?2014..这显然会导致后端错误。为什么IE会这样做,我该如何解决?
看起来这是IE 11引入的一个bug。IE 11使用Unicode字符,所以你看到的是U+200E 'LEFT-TO-RIGHT MARK'。
作为解决此问题的临时解决方案,您可以替换该字符。像这样:
console.log((new Date()).toLocaleDateString().replace(/\u200E/g, ''));
你应该在这里查看答案: ToLocaleDateString() changes in IE11
你不应该使用旨在为本地特定人类显示格式化某些内容的函数,并期望输出可被机器解析。toLocaleString、toLocaleDateString 或 toLocaleTimeString 的任何输出都仅用于人类可读的显示。(如Bergi在评论中澄清的那样,toString 也是用于人类显示的,但ECMA §15.9.4.2 表示它应该往返)
虽然该函数返回一个字符串,但它只适用于人类阅读,从不适合机器解析。我不确定它在IE中是什么编码,但尽管它看起来像一个字符串,在底层它使用了不同的编码。
对于日期格式化,您可以使用 Moment.js,或者编写自己的格式化函数。
application/json; charset=utf-8
。我们使用JSON.stringify
因为我们有一个使用 JSON 解序器将 JSON 映射到类的 ASP .NET 后端。 - Matt Hintzkemm/dd/yyyy
格式,这将使8/13/2014
变成08/13/2014
...这是一个解决方法,但仍然无法回答为什么首先会发生这种情况的问题。 - Matt Hintzke