我正在尝试用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'的输入文本中获取日期(是带掩码的输入日期)。
答案 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 ,并且您不想格式化矩函数
将此方法用于日期格式“ 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());
}