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()
对象母版,请指出正确的方向。
谢谢。
答案 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]);
}
我希望这能回答你的问题。