Поле даты в угловом уменьшении месяца на 1, когда пользователь вводит поле года в угловом

У меня есть поле даты, определенное в HTML

<input type = "date" name = ""  (change) = "handleBlur($event)" min = "1970-01-01" max = "9999-12-31"
       value = "{{ somedate| date:'yyyy-MM-dd' }}">

и в файле ts я обрабатываю событие onchange

    handleBlur(event: any) {
   this.somedate= new Date(event.target.value).toISOString()
    console.info('after', this.somedate)
    this.formobject.controls['somedate'].setValue(this.somedate)
    this.appService.updateSaveDataValue({ somedate: this.somedate})
  }

Этот контроль даты отлично работает в некоторых странах X, но не в других. Я имею в виду, что пользователь может выбрать дату из элемента управления календарем, а также ввести значение даты. Однако, когда пользователь использует идентичный инструмент из региона США, этот элемент управления ведет себя странно. При изменении года каждая клавиша уменьшает день на единицу, а когда пользователь меняет день, месяц уменьшается на единицу. Я не знаю, как это исправить или в чем причина проблемы.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
0
20
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Объекты даты JavaScript имеют компонент времени. new Date(...) создаст новый объект Date со временем «сейчас» в текущем часовом поясе пользователя. При преобразовании этого объекта даты в строку ISO будет стандартизирован компонент времени, что может привести к изменению самой даты.

Например, рассмотрим, выбираю ли я дату 2 апреля 2022 года ровно в 00:30 утра в часовом поясе GMT+1. Когда .toISOString() вызывается для этого объекта даты, он будет преобразован в 1 апреля 2022 года в 23:30 для GMT+0. Это может произойти и в обратном направлении, а также ближе к полуночи.

Чтобы избежать этого, вы можете вручную создать строку ISO из дня, месяца и года в объекте даты или привлечь библиотеку, которая поможет сделать это за вас. Существует несколько библиотек, которые могут помочь с управлением датами, например, momentjs, Day.js, date-fns и т. д.

Другие вопросы по теме