Почему новый Date(dateString) возвращает две разные даты на разных устройствах с одинаковым вводом?
Зная, что мой часовой пояс GMT+2, рассмотрим следующий код:
Запуск на телефоне Selfy 4G:
myDate = "2017-05-12T09:00:00"; dateFoo = new Date(myDate); // Fri May 12 2017 11:00:00 GMT+0200 (CEST)
Работаем на Galaxy S7:
myDate = "2017-05-12T09:00:00"; dateFoo = new Date(myDate); // Fri May 12 2017 09:00:00 GMT+0200 (CEST)
Почему в результатах есть несоответствие, и как бы я решил это?
Мой вопрос отличается от других подобных вопросов (например, почему Date.parse дает неверные результаты?), Потому что в моем случае я использую ту же самую строку, и это устройства, которые отличаются.
2 ответа
Первоначальная проблема заключалась в том, что Date.parse на одном устройстве использовал мое местное время в качестве часового пояса, а на другом устройстве - UTC.
Добавляя Z в конце моей начальной строки dateString, я заставляю дату всегда считаться UTC, независимо от того, какое это устройство, и таким образом достигать согласованных результатов с Date.parse().
Чтобы узнать дату по местному времени, я использовал ответ на этот вопрос: /questions/41045745/json-stringify-menyaet-vremya-iz-za-utc/41045765#41045765.
Разница в вашей дате из-за часового пояса. Вы можете попытаться преобразовать дату в дату UTC для получения идеального результата, как это.
myDate = "2017-05-12T09:00:00";
dateFoo = new Date(myDate).toUTCString();