javascript - Chrome 浏览器格式化日期并删除 T 和时间为零时的时间其他答案不起作用

标签 javascript jquery google-chrome datetime

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 问题 539813543320 ,和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/

相关文章:

html - Svg 数字 - 需要缩放和翻译,Chrome 和 Firefox 之间的区别

javascript - 在父范围内跟踪多个非重复的 Angular Directive(指令)

javascript - 在 javascript 中单击选项卡时仅加载 jsp 选项卡内容?

javascript - 根据 anchor 中的标签添加样式

javascript - 如何在表格列中添加阅读更多或更少按钮

jQuery.ajax如何使用contents属性

google-chrome - Chrome45 和 Firefox - 大多数网站上的 ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION

javascript - 从 jqgrid 删除行时禁用/隐藏确认对话框

javascript - 将对象转换为数组的最佳方法

javascript - 仅检测移动设备上的 Chrome