Safari возвращает неверное значение для Date toISOString () - PullRequest
0 голосов
/ 16 февраля 2019

Когда я преобразую строку даты 2019-02-16T10:00:00 в объект даты JS в часовом поясе GMT+0100 (CET), а затем вызову .toISOString() Я ожидаю получить дату / время ISO 2019-12-01T09:10:10.000Z (- 1 час) .

Однако я вижу следующее:

Safari (неверно):

new Date('2019-12-01T10:10:10').toISOString()
\\ returns 2019-12-01T10:10:10.000Z

Chrome (правильно):

new Date('2019-12-01T10:10:10').toISOString()
\\ returns 2019-12-01T09:10:10.000Z

FireFox (правильно):

new Date('2019-12-01T10:10:10').toISOString()
\\ returns 2019-12-01T09:10:10.000Z

Я что-то упустил, или это известная проблема Safari?

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Я нашел проблему.Safari не может преобразовать строку даты в формате 2019-12-01T10:10:10 в объект Date, не привинчивая ее.Решение ( найденное здесь ) состоит в том, чтобы переформатировать в 2019/12/01 10:10:10, который поддерживается всеми браузерами.

// convert into YYYY/MM/DD HH:MM:SS
var dateString = '2019-12-01T10:10:10'.replace(/-/g, '/').replace('T', ' ');

Safari (правильно) :

new Date(dateString).toISOString()
\\ returns 2019-12-01T09:10:10.000Z

Хром (правильно) :

new Date(dateString).toISOString()
\\ returns 2019-12-01T09:10:10.000Z

FireFox (правильно):

new Date(dateString).toISOString()
\\ returns 2019-12-01T09:10:10.000Z

Надеюсь, это сэкономит следующему разочарованному разработчику пару часов!

0 голосов
/ 16 февраля 2019

Похоже, что Safari использует предоставленное время ввода как время в UTC, но Chrome и Firefox используют местные часовые пояса.Я не смог найти ни одного официального документа, подтверждающего это поведение.Но вы можете легко проверить это в своем браузере.Вот результаты для меня в Индии (GMT+530).

Chrome/FF:
new Date('2019-12-01T10:10:10Z').toISOString()
"2019-12-01T10:10:10.000Z"
new Date('2019-12-01T10:10:10').toISOString()
"2019-12-01T04:40:10.000Z"

Safari:
new Date('2019-12-01T10:10:10').toISOString()
"2019-12-01T10:10:10.000Z"
new Date('2019-12-01T10:10:10Z').toISOString()
"2019-12-01T10:10:10.000Z"
...