Chrome 浏览器显示错误的日期,而 Firefox 显示正确的日期
我正在使用人们多次投票的代码
F12 并在 Chrome 和 Firefox 中运行这个 fiddle ,我只关心 Chrome
http://jsfiddle.net/bthorn/foag0zew/
//This works fine to convert
var dateString = "2015-10-14T17:54:19.033";
没有时间,最终无法正常显示 10/27/15,而不是正确的 10/28/15
var dateString2 = "2015-10-28T00:00:00";
代码(也在 fiddle 中)
var dateString2 = "2015-10-28T00:00:00";
var date2 = new Date(dateString2);
var formattedDateString2 = (date2.getMonth() + 1) + "/" + date2.getDate() + "/" + date2.getFullYear().toString().substr(2, 2);
console.log(formattedDateString2);
最佳答案
这实际上是由于 Chrome 最近在正确支持 ES6 规范方面进行了一些更改。请参阅 Chromium 问题 539813和 543320 ,和ECMAScript tc39 issue 87
基本上发生的事情是:
ES5 曾经指定将不带偏移量的 ISO 格式的字符串视为 UTC,但没有实现遵循这一点,因为通过 ISO8601,它应该默认为本地而不是 UTC。所以,这个问题在 ES6 中得到了修复。
Chrome 实现了这一更改,因为以前的纯日期值被解释为 UTC,而日期+时间值被解释为本地时间。
Chrome 决定恢复更改并恢复到旧的行为。就我个人而言,我认为这是一个错误 - 但其他人不同意。
当他们恢复更改时,他们无意中将仅日期值和日期+时间值都切换回 UTC 默认值,而不仅仅是仅日期值。因此,现在您的日期+时间值将以 UTC 而非本地时间进行解释。
要强制将其解释为本地时间,需要进行一些字符串替换。这应该有效:
var s1 = "2015-10-28T00:00:00";
var s2 = s1.replace(/-/g,'/').replace('T',' '); // "2015/10/28 00:00:00"
var d = new Date(s2); // now will parse as local in all browsers
关于javascript - Chrome 浏览器格式化日期并删除 T 和时间为零时的时间其他答案不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33423873/