我试图使用验证生日,dayjs但它isValid返回true的日期不存在。有趣的是,isValidbymoment运行得很好。
dayjs('2019/02/31', 'YYYY/MM/DD').isValid() // true
moment('2019/02/31', 'YYYY/MM/DD').isValid() // false
Run Code Online (Sandbox Code Playgroud)
moment由于重量轻,我无法切换到dayjs
知道如何解决这个问题吗?
ble*_*ert 12
2021 年 8 月:现在可以使用.isValid()方法检测这些无效日期,并将第三个参数作为 true 传递给dayjs构造函数:
dayjs('2019/02/31', 'YYYY/MM/DD').isValid() // true
dayjs('2019/02/31', 'YYYY/MM/DD',true).isValid() // false
Run Code Online (Sandbox Code Playgroud)
注意:在调用 isValid() 之前Node.js我必须加载第一个customParseFormat插件才能收到预期的有效性结果:
const dayjs = require("dayjs");
var customParseFormat = require("dayjs/plugin/customParseFormat");
dayjs.extend(customParseFormat);
Run Code Online (Sandbox Code Playgroud)
请看看这个线程。基本上isValid不验证传递的日期是否存在,它只是验证日期是否已正确解析。
我不确定这是否适用于所有场景(特别是如果您有本地化),但您可以尝试以下操作:
function validate(date, format) {
return dayjs(date, format).format(format) === date;
}
validate('2019/02/31', 'YYYY/MM/DD') // false
Run Code Online (Sandbox Code Playgroud)
进行这种检查的原因是
dayjs('2019/02/31', 'YYYY/MM/DD').format('YYYY/MM/DD')
Run Code Online (Sandbox Code Playgroud)
返回2019/03/03。然后,当您将其与初始日期进行比较时(您应该能够,因为格式相同),您应该得到相同的值 - 在这种情况下,您不会。