Javascript 来自屏蔽输入文本的无效日期

Javascript 来自屏蔽输入文本的无效日期,javascript,date,momentjs,Javascript,Date,Momentjs,我试图用moment js验证生日,但我做不到。 我正在使用这个代码: dateIsBefore(date) { return moment(date, 'DD/MM/YYYY').isBefore(moment().format('DD/MM/YYYY')); } 这是我的屏蔽输入元素: <el-input class="date-input" type="tel"

我试图用moment 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”的输入文本(是一个隐藏的输入日期)中获取日期。

我怀疑问题出在这里:

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
,则矩必须解析该字符串。在不知道格式的情况下,面对
##/##/#####
格式的字符串,几乎肯定会使用(有点奇怪的)美国格式,即
MM/DD/YYYY
,因为浏览器在面对这种字符串时(即使在美国以外)也会这样做


传递一个时刻意味着您不必担心这一点。

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

将此方法用于日期格式“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());
}
既然您已经有时间了,为什么要将字符串传递到
isBefore