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