来自蒙版输入文本的瞬间js无效日期

时间:2019-04-28 16:35:11

标签: javascript date momentjs

我正在尝试用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 :(得分:0)

我怀疑问题出在这里

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

您已经有一个Moment(来自moment()),只需直接使用它,不要将其转换为字符串:

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

这肯定更有意义,我认为它可以解决您的问题的原因是,如果将字符串传递给isBefore,Moment必须解析该字符串。在不知道格式的情况下,面对##/##/####形式的字符串,几乎可以肯定会使用(有些奇怪)美国格式,即MM/DD/YYYY,因为这是浏览器在(甚至在美国以外)所做的工作面对这种字符串。

传递瞬间意味着您不必为此担心。

答案 1 :(得分:0)

因为方法 dateIsBefore 的输入参数的格式为 DD-MM-YYYY ,因此这不是有效的日期格式。您的日期格式应为 MM-DD-YYYY ,并且您不想格式化矩函数

Date time string format

enter image description here

将此方法用于日期格式“ DD-MM-YYYY”

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());
}