Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript DayJS isValid的行为与Moment不同_Javascript - Fatal编程技术网

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')