momentjs验证无法正常工作的函数



我正在开发一个聊天机器人,用户将在其中以不同的格式输入日期,因此我创建了一个函数,用我提供的流行格式列表验证他们使用momentjs输入的日期。

问题是,即使使用错误的格式(如(35 August((,isValid也会返回true。我发现我提供的数组中的最后两种格式是导致问题的原因,但我不知道为什么。


const validateDate = (date) => {
const formats = ["DMMM", "DMMMYY", "YYYY-MM-D", "YYYY-MM"];
const momentDate = moment(date, formats);
console.log(momentDate.isValid());
console.log(momentDate);
};
validateDate("29 Aug");     //Moment<2020-08-29T00:00:00+02:00>
validateDate("35 Aug");   //Moment<2035-01-01T00:00:00+02:00>

让我们简单一点:

D-代表一天
M-表示月份
Y-表示年份

在上述情况下,年份设置为默认2020年(当前年份(这就是为什么29日至8月的默认日期为:"2020-08-29">

我认为你正在寻找的第二种情况的格式是:

const dayFormat = ["DD MMM"];

您可以将其添加到格式列表中:

const formats = ["DMMM", "DMMMYY", "YYYY-MM-D", "YYYY-MM", "DD MMM"];

在不同格式之间混合时存在问题,例如,后两种格式:"YYYY-MM-D""YYYY-MM"。由于日期被翻译成了一年,因此错误地将日期改为原来的日期。

我认为你应该这样做:

  1. 请确保启用所有这些格式,并且在当前的格式之间没有冲突
  2. 我认为在这种情况下,最好自定义验证功能,这样它将易于维护。以下是自定义选项的示例:

const formatValidator = (value, validFormats) => {
return moment(value, validFormats, true).isValid()
}
const validateDate = (date) => {
const formats = ["DD MMM", "DMMM", "DMMMYY", "YYYY-MM-D", "YYYY-MM"] // original
const momentDate = moment(date, formats)
console.log(formatValidator(momentDate, formats))
}
validateDate("29 Aug")
validateDate("35 Aug")

相关内容

  • 没有找到相关文章

最新更新