Я столкнулся с этой ошибкой в ​​объекте 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