Дата UTC в объекте Date () по-разному выводится в Safari - PullRequest
0 голосов
/ 24 мая 2018
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 января?Я не хочу использовать moment.js или другую платформу для решения этой проблемы.Если вы мастер объектов JavaScript Date(), укажите мне правильное направление.

Спасибо.

1 Ответ

0 голосов
/ 24 мая 2018

Некоторые браузеры обрабатывают строки даты по-разному.Mozilla отмечает эту проблему на своей странице Date документации:

Синтаксический анализ строк даты с помощью конструктора Date (и Date.parse, они эквивалентны) настоятельно не рекомендуется из-за различий и несоответствий в браузере.- Источник

Они также отмечают это на своей странице документации Date.parse(), которая дает подсказку относительно решения:

Это неРекомендуется использовать Date.parse, так как до ES5 разбор строк полностью зависел от реализации.По-прежнему существует много различий в том, как разные хосты анализируют строки даты, поэтому строки даты следует анализировать вручную (библиотека может помочь, если нужно разместить много разных форматов).- Источник

Как отмечено в этого ответа , вы можете лучше всего разбить строку и использовать отдельный конструктор 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]);
}

Я надеюсь, что это отвечает на ваш вопрос.

...