我正尝试使用dayjs
来验证生日,但其isValid
返回true
的日期不存在。有趣的是,isValid
的{{1}}运行正常。
moment
由于dayjs('2019/02/31', 'YYYY/MM/DD').isValid() // true
moment('2019/02/31', 'YYYY/MM/DD').isValid() // false
的轻巧性,我无法切换到moment
有什么办法解决这个问题吗?
答案 0 :(得分:0)
moment.isValid()的工作方式(溢出检查)
如果解析后的输入结果不存在,moment#isValid将返回false。
dayjs.isValid()的工作方式
如果您查看源代码:
src / index.js
this.$d = parseDate(cfg) // Line 75
// ...
isValid() { // Line 96
return !(this.$d.toString() === C.INVALID_DATE_STRING)
}
src / constant.js
export const INVALID_DATE_STRING = 'Invalid Date'
如果您查看源文件 parse 并不是一个简单的Date.parse()
,因为它考虑了语言环境,日期格式等因素,但似乎每个有效日期都传递给Date( )或Date.parse()是有效。
Date.parse('2019/02/31') // 1551567600000
new Date(2019/02/31) // Thu Jan 01 1970 01:00:00 GMT+0100
答案 1 :(得分:0)
请查看this thread。基本上isValid
不验证是否存在通过日期,它只是验证日期是否已正确解析。
我不确定这是否适用于所有情况(特别是如果您具有本地化),但是您可以尝试以下方法:
function validate(date, format) {
return dayjs(date, format).format(format) === date;
}
validate('2019/02/31', 'YYYY/MM/DD') // false
这种检查的原因是
dayjs('2019/02/31', 'YYYY/MM/DD').format('YYYY/MM/DD')
返回2019/03/03
。然后,当您将其与初始日期进行比较时(因为格式相同,所以应该可以),您应该获得相同的值-在这种情况下,您不需要。