Дата меняется на один день раньше при преобразовании объекта JavaScript Date в строку JSON - PullRequest
1 голос
/ 08 марта 2020

Я хочу передать объект Date (дата «12/01/2019» в формате MM / DD / YYYY) в виде строки JSON в API. Но при преобразовании этой даты (без учета часового пояса) в строку JSON дата меняется на один день раньше. Пожалуйста, смотрите код, указанный ниже:

var newDate = new Date("12/01/19");
console.log(newDate)        // Showing Sun Dec 01 2019 00:00:00 GMT+0530 (India Standard Time)
var jsonDate = JSON.stringify(newDate);
console.log(jsonDate)       // Showing "2019-11-30T18:30:00.000Z"

Дата De c 01, 2019 меняется на 30 ноября 2019. В моем случае я не могу учитывать время или часовой пояс. Я также не могу использовать 'Момент JS'.

Почему это происходит? Кто-нибудь может указать причину этой странной проблемы?

1 Ответ

2 голосов
/ 08 марта 2020

Поскольку ваша строка даты имеет нестандартный формат, конструктор Date обрабатывает его как местное время (см. Руководство для Date.parse() в разделе " Различия в предполагаемом часовом поясе »). Однако JSON.stringify() вызывает Date.toJSON(), который вызывает Date.toISOString(), который всегда выводит время со смещением UT C . В результате вам нужно перевести свою дату в UT C, вычтя смещение часового пояса, которое можно получить с помощью Date.getTimezoneOffset().

В качестве альтернативы, укажите формат ISO (YYYY-MM-DD) строка даты и никакая корректировка не требуется, так как конструктор Date будет рассматривать это как время UT C.

// non-standard date format
var newDate = new Date('12/01/19');
console.log(newDate.toJSON());

var os = newDate.getTimezoneOffset();
newDate = new Date(newDate.getTime() - os * 60 * 1000);
console.log(newDate.toJSON());

// ISO format date
var newDate2 = new Date('2019-12-01');
console.log(newDate2.toJSON());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...