Я столкнулся с этой ошибкой в объекте JavaScript Datetime. Приложение установило дату в базе данных на 2019–01–31, но когда я снова попытался отредактировать ее на панели даты, она показала 2019–01–30. Дата перенесена на один день назад, странно, правда?
Я заглянул в базу данных: дата была примерно 2019–01–31 00: 00: 00 + 00, дата была правильной, и все выглядело хорошо, не так ли?
Вот на что нам нужно было обратить внимание. Дата: 01–31: 00:00 по всемирному координированному времени (+00). UTC - всемирное координированное время.
Поэкспериментируйте (хромированная консоль) и найдите первопричину
new Date('2019-01-30 00:00:00+00') Tue Jan 29 2019 19:00:00 GMT-0500 (Eastern Standard Time)
Это было то же самое, что и датапикер, который автоматически возвращался на один день назад. Проблема заключалась не в выборе даты, а в том, что на локальном компьютере использовался часовой пояс Eastern Standard Time , поэтому объект Date / datepicker отображался как EST . Следовательно, он вернулся на 5 часов назад с 12:00 утра по всемирному координированному времени, которое стало днем ранее.
В данном случае мы хотели сохранить дату в базе данных без времени, поэтому мы хотели бы сохранить дату с UTC 12:00 утра, что мы сейчас и делаем.
Решение
Я выяснил это на основании своего исследования.
new Date('2019-01-30 00:00:00') Wed Jan 30 2019 00:00:00 GMT-0500 (Eastern Standard Time)
Если бы я удалил часть +00, тогда метод Date будет обрабатывать время как часовой пояс локального компьютера вместо преобразования в часовой пояс компьютера из времени UTC.
- до: 12:00 по всемирному координированному времени, конвертируйте его в часовой пояс EST минус 5 часов
- after: 12:00 am EST timezone
Как получить объект даты и удалить часть часового пояса?
new Date('2019-01-31').toISOString() "2019-01-31T00:00:00.000Z" new Date("2019-01-31T00:00:00.000Z") Wed Jan 30 2019 19:00:00 GMT-0500 (Eastern Standard Time) new Date("2019-01-31T00:00:00") Thu Jan 31 2019 00:00:00 GMT-0500 (Eastern Standard Time)
Если вы получите объект Date, вы можете сделать что-то вроде этого, чтобы он возвращал строку даты ISO с частью часового пояса
dateObj.toISOString().replace(‘.000Z’, ‘’)
Ссылка
Https://stackoverflow.com/questions/9509360/datepicker-date-off-by-one-day