Date()对象中的UTC日期在Safari中的输出方式不同

时间:2018-05-24 17:34:30

标签: javascript date datetime safari utc

var dateString = "2018-01-01T00:00:00";
new Date(dateString);

Chrome,Edge和Firefox(右):

Mon Jan 01 2018 00:00:00 GMT-0800 (PST)

Safari(错误):

Sun Dec 31 2017 16:00:00 GMT-0800 (PST)

我可以做些什么让Safari有义务在1月1日?我不想使用moment.js或其他框架来解决这个问题。如果您是JavaScript Date()对象母版,请指出正确的方向。

谢谢。

1 个答案:

答案 0 :(得分:2)

有些浏览器处理日期字符串的方式不同Mozilla在Date文档页面上注意到了这个问题:

  

由于浏览器差异和不一致性,强烈建议不要使用Date构造函数(和Date.parse,它们是等效的)解析日期字符串。 - Source

他们还在Date.parse()文档页面上注明了这一点,该页面提供了解决方案的提示:

  

不建议在ES5之前使用Date.parse,解析字符串完全取决于实现。不同主机如何解析日期字符串仍然存在许多差异,因此应手动解析日期字符串(如果要容纳许多不同的格式,库可以提供帮助)。 - Source

this answer所述,您最好分割字符串并使用分隔的Date()构造函数。示例代码:

var arr = "2018-01-01T00:00:00".split(/\D/);
var date = new Date(arr[0], arr[1]-1, arr[2], arr[3], arr[4], arr[5]);

在一个功能中:

function parseDateString(dateString) {
    var arr = dateString.split(/\D/);
    return new Date(arr[0], arr[1]-1, arr[2], arr[3], arr[4], arr[5]);
}

我希望这能回答你的问题。