Javascript DayJS isValid的行为与Moment不同
我试图使用Javascript DayJS isValid的行为与Moment不同,javascript,Javascript,我试图使用dayjs验证生日,但是它的isValid返回了一个不存在的日期的true。有趣的是,是有效的by时刻工作正常 dayjs('2019/02/31', 'YYYY/MM/DD').isValid() // true moment('2019/02/31', 'YYYY/MM/DD').isValid() // false 我无法切换到时刻,因为dayjs 知道如何解决这个问题吗?矩.isValid()如何工作(溢出检查) 如果解析输入的结果不存在,则矩#isValid将返回false
dayjs
验证生日,但是它的isValid
返回了一个不存在的日期的true
。有趣的是,是有效的
by时刻
工作正常
dayjs('2019/02/31', 'YYYY/MM/DD').isValid() // true
moment('2019/02/31', 'YYYY/MM/DD').isValid() // false
我无法切换到时刻
,因为dayjs
知道如何解决这个问题吗?矩.isValid()如何工作(溢出检查)
如果解析输入的结果不存在,则矩#isValid将返回false
dayjs.isValid()的工作原理
如果您查看源代码:
src/index.js
src/constant.js
如果您查看源代码,则解析不是一个简单的Date.parse()
,因为它考虑了区域设置、日期格式等,但似乎传递给Date()或Date.parse()的每个有效日期都是有效的
请看。基本上,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
。然后,当您将其与初始日期进行比较时(因为格式相同,所以您应该能够),您应该会得到相同的值-在这种情况下,您不会得到相同的值。这是一个错误,您可以看到@RapSherlock My date在两个库中都被正确解析
Date.parse('2019/02/31') // 1551567600000
new Date(2019/02/31) // Thu Jan 01 1970 01:00:00 GMT+0100
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')