момент, когда недопустимая дата из маскированного входного текста - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь подтвердить дату рождения с моментом js, но я не могу этого сделать.Я использую этот код:

dateIsBefore(date) {
      return moment(date, 'DD/MM/YYYY').isBefore(moment().format('DD/MM/YYYY'));
    }

, и это мой элемент ввода в маске:

<el-input
                  class="date-input"
                  type="tel"
                  v-mask="'##/##/####'"
                  placeholder="dd/mm/aaaa"
                ></el-input>

, но он возвращает мне ложное значение, когда я ожидаю истину.Объект момента говорит, что дата недействительна.

Я получаю дату из введенного текста (это дата ввода в маске) ​​в формате '28 /04/1990 '.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

Это потому, что входной параметр для метода dateIsBefore имеет формат ДД-ММ-ГГГГ это недопустимый формат даты. Ваша датаформат должен быть ММ-ДД-ГГГГ , и вы не хотите форматировать функции моментов

Формат строки даты и времени

enter image description here

Используйте этот метод для формата даты «ДД-ММ-ГГГГ»

function dateIsBefore(date) {
 const dateInput=date.split('-') //use this line of code the input is in the format 
  of 'DD-MM-YYYY'
 return moment(`${dateInput[1]}-${dateInput[0]}-${dateInput[2]}`).isBefore(moment());
}
0 голосов
/ 28 апреля 2019

Я подозреваю, что проблема здесь:

dateIsBefore(date) {
  return moment(date, 'DD/MM/YYYY').isBefore(moment().format('DD/MM/YYYY'));
// --------------------------------------------------^^^^^^^^^^^^^^^^^^^^^
}

У вас уже есть момент (от moment()), просто используйте его напрямую, не конвертируйте его в строку:

dateIsBefore(date) {
  return moment(date, 'DD/MM/YYYY').isBefore(moment());
}

Это определенно имеет больше смысла, и я думаю, что это может решить вашу проблему в том, что если вы передаете строку в isBefore, Moment должен проанализировать строку.Не зная формата, столкнувшись со строкой в ​​форме ##/##/####, он почти наверняка будет использовать (несколько странный) американский формат, который равен MM/DD/YYYY, потому что это то, что делают браузеры (даже за пределами США), когда сталкиваются с таким видом

Проходя через мгновение, вам не нужно об этом беспокоиться.

...