Moment js正在验证边缘案例,日期为2月30日



我想验证以下日期是否有效:2021年2月30日。因此,主要问题是2021年2月30日不应是有效日期或2021年4月31日。用moment js或luxon有可能做到这一点吗?还是我应该使用另一种方法?

let m = moment([2021, 2, 31]);
console.log("Date is valid", m.isValid()); \returns true which is not a valid date!

我不知道moment.js或luxon,但它可以在基本的js中实现(尽管有点冗长(

JavaScript会勾选日期,所以2月29日是3月1日。

因此,我们可以比较之前和之后的版本:

var month = 1; // zero based - 1 is feb
var day = 30;
var year = 2021;
var testDate = new Date(year, month, day); // will convert to 2nd of March
var parsedDate = testDate.getDate(); // will be 2
var parsedMonth = testdate.getMonth() // will be 2 , zero based, March
var parsedYear = testDate.getFullYear(); // remains 2021 in this case
var isValidDate = parsedDate === day && parsedMonth === month && parsedYear === year;

这可能会被压缩很多,但为了提高的可读性,我已经把它做得尽可能地臃肿

你可以很容易地把它变成一个函数,类似于这个(未经测试的(

function IsValidDate(year, month, day){
var InputMonthsAreOneBased = 0; // change to 1 if needed
var testDate = new Date(year, month - InputMonthsAreOneBased, day );
return testDate.getDate() === day && testdate.getMonth() === (month - InputMonthsAreOneBased) && testDate.getFullYear() === year;
}

相关内容

  • 没有找到相关文章

最新更新