Дата выбираемая через календарь и вводимая вручную обрабатываются по разному
Всем привет. Столкнулся с проблемой при работе с датами.
Использую 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