В зависимости от вашего региона, май месяц попадает в летнее время.
Установка даты 05.01.1985 должна выглядеть как 1985-05-01T00:00.000+1:00
, если вы сохраните часовой пояс.
Похоже, происходит то, что вы извлекаете дату в UT C. Это преобразует дату в +0: 00 и, таким образом, перенесет вас в предыдущий день по номеру 1985-04-30T23:00.000+0.00
.
. Если вы попытаетесь использовать Stackblitz, проблема доказана - выберите дату до конца марта и после конец октября - эти даты работают нормально, поскольку они не при переходе на летнее время.
Ваша функция форматирования даты извлекает дату, используя .toISOString()
. Согласно Моцциле (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString), это всегда вернет время UT C, и вы получите дату на час позже, а поскольку это в полночь, она падает на предыдущий день.
Поскольку вас интересует только дата, а средство выбора даты может смещаться до 12 часов каждый раз, когда мы можем проверить это.
Дата по умолчанию всегда полночь, поэтому все, что раньше UT C, подойдет, так как останется той же датой. Все, что за UT C, go вернется на 12 часов и на следующий день.
В коде проверка смещения часового пояса скажет нам, если мы отстаем. Если это так, то мы хотим добавить часы к объекту datetime, чтобы при использовании toISOString
мы все равно выбирали дату.
, поэтому функция должна выглядеть следующим образом:
const date = new Date(+timestamp);
const offset = date.getTimezoneOffset();
if (offset < 0) {
date.setHours(12,0,0);
}
return date.toISOString().substring(0,10);