我想验证以下日期是否有效: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;
}