-1

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

1 回答 1

0

我不知道 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;
}

于 2021-04-01T16:47:34.243 回答