Chrome浏览器用删除T的格式设置日期和时间,当时间为零时,其他答案不起作用

Chrome browser Format date with remove T and time when time is zero other answers are NOT working

本文关键字:时间 当时 零时 不起作用 答案 其他 日期 删除 浏览器 设置 格式      更新时间:2023-09-26

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";

代码(也在小提琴中)

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第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