Дата выбираемая через календарь и вводимая вручную обрабатываются по разному

Всем привет. Столкнулся с проблемой при работе с датами.

Использую Vue с Quasar. Добавляю Импут и q-date, для отображения календарика ввода даты.

И у меня возникает пролема.

При вводе даты через календарик - все ок. Дата идет по маске ДД.ММ.ГГГГ.

НО. Когда я убираю календарик и вожу дату руками, то JS читает ее как ММ.ДД.ГГГГ не смотря на маску.

Что я делаю не так ? Пример кода прикрепляю:

<q-input
                      :disable="noRequestsReceived"
                      outlined
                      dense
                      v-model="showIncomingDate"
                      class="date"
                      id="idDate"
                      maxlength="10"
                      style="max-width: 176px !important"
                      @keypress="dateCheckIncoming($event)"
                      @update:model-value="checkIncomingDate($event)"
                      :class="{'error-input':errorCheckerIncomingDate}"

                    >
                      <template v-slot:default>
                        <q-popup-proxy transition-show="scale" transition-hide="scale">
                          <q-date
                            minimal
                            v-model="showIncomingDate"
                            @update:model-value="updateIncomingDate"
                            mask="DD.MM.YYYY"
                            :options="optionFn"
                             />
                        </q-popup-proxy>
                      </template>
                    </q-input>
function dateCheckIncoming ($event: { keyCode: number; preventDefault: () => void }) {
  if ($event.keyCode < 47 || $event.keyCode > 57 || $event.keyCode === 8) {
    console.log('default')
    $event.preventDefault()
  }
  var len = showIncomingDate.value.length
  if (len !== 3 && len !== 1) {
    if ($event.keyCode === 47) {
      $event.preventDefault()
    }
  }
  if (len === 2) {
    if ($event.keyCode !== 8 && $event.keyCode !== 46) {
      showIncomingDate.value = showIncomingDate.value + '.'
    }
  }
  if (len === 5) {
    if ($event.keyCode !== 8 && $event.keyCode !== 46) {
      showIncomingDate.value = showIncomingDate.value + '.'
    }
  }
}
function checkIncomingDate (event: any) {
  if (event.length === 10) {
    var selectedDate = new Date(event).toISOString()
    console.log(selectedDate, refCurDate)
    if (selectedDate >= refDate && selectedDate <= refCurDate) {
      console.log('Все хорошо')
      errorCheckerIncomingDate.value = false
    } else {
      console.log('Дата меньше требуемой')
      showCreateDate.value = currentDateForShow.value
      errorCheckerIncomingDate.value = true
    }
  }
}
function updateIncomingDate () {
  data.incomingDate = new Date(convertDate(showIncomingDate.value)).toISOString()
}

Поясню методы dateCheckIncoming - следит чтобы дата вручную писалась в нужном формате checkIncomingDate - проверка диапазона дат updateIncomingDate - просто сохранение стрроки даты как ISO стринг для сравнений дат и для отправки на бэк

Попробовал разбить страку по точкам на массив и переставить месяц и год местами - поучаю почтоянно ерунду какую-то. ПИшу 10.10.2022, а в ответ падает дата 2022-11-09. Совпадает только год. День\месяц или + или - 1


Ответы (0 шт):