我试图使用dayjs
验证生日,但是它的isValid
返回的是一个不存在的日期的true
。有趣的是,isValid
by moment
运行得很好。
dayjs('2019/02/31', 'YYYY/MM/DD').isValid() // true
moment('2019/02/31', 'YYYY/MM/DD').isValid() // false
我不能转到moment
,因为dayjs
的重量很轻
知道怎么解决这个问题吗?
发布于 2019-10-03 10:16:15
请看这条线。基本上,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
。然后,当您将其与初始日期进行比较时(您应该能够获得相同的格式),您应该得到相同的值--在这种情况下,您没有。
发布于 2021-08-28 14:38:54
2021年8月:现在可以用.isValid()
方法检测这些将第三个参数作为真传递给dayjs
构造函数的无效日期:
dayjs('2019/02/31', 'YYYY/MM/DD').isValid() // true
dayjs('2019/02/31', 'YYYY/MM/DD',true).isValid() // false
有关这个严格解析参数的更多信息,现在可以在官方医生上找到。
注意:在Node.js
中,我必须先加载customParseFormat
插件,然后调用isValid()才能获得预期的有效性结果:
const dayjs = require("dayjs");
var customParseFormat = require("dayjs/plugin/customParseFormat");
dayjs.extend(customParseFormat);
发布于 2019-10-03 10:12:12
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'
如果您查找源解析,那么它不是一个直接的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
https://stackoverflow.com/questions/58216504
复制相似问题