UTC日期转换为本地日期不起作用,Safari

时间:2018-04-25 18:25:07

标签: javascript date datetime utc

我有一个UTC字符串"2018-04-25T13:36:00",我将其传递给此函数:

function convertUTCDateToLocalDate(dateString) {
    var newDate = new Date(dateString);
    newDate.setMinutes(dateString.getMinutes() - dateString.getTimezoneOffset());

    return newDate;
}

var localDate = convertUTCDateToLocalDate(new Date("2018-04-25T13:36:00"));
console.log(localDate);

Chrome,Firefox和Edge正确地返回为(PASS):

Wed Apr 25 2018 06:36:00 GMT-0700 (PDT)

然而,Safari将其返回为(FAIL):

Tue Apr 24 2018 23:36:00 GMT-0700 (PDT)

为什么Safari会成为一名坚持者?

1 个答案:

答案 0 :(得分:2)

字符串“2018-04-25T13:36:00”解析为本地字符串,但Safari会将其错误并将其解析为UTC。由于您要将其解析为UTC,一个简单(但不推荐)的方法是简单地将“Z”添加到字符串中,以便所有浏览器将其解析为UTC:

var s = '2018-04-25T13:36:00';
console.log(new Date(s+'Z').toString());

但是,一般建议永远不要使用内置解析器,因为它是众所周知的问题(请参阅Why does Date.parse give incorrect results?),为您的特定格式编写自己的解析器或使用库。要将您的格式解析为UTC,请考虑:

var s = '2018-04-25T13:36:00';

// Parse YYYY-MM-DDTHH:mm:ss as UTC
function parseUTC(s) {
  var b = s.split(/\D/);
  return new Date(Date.UTC(b[0],--b[1],b[2],b[3],b[4],b[5]))
}

var d = parseUTC(s);

console.log(d.toISOString());
console.log(d.toString());