Date 2月30日这样的日子
我想验证以下日期是否有效:2021年2月30日。 因此,主要问题是2021年2月30日不应该是有效日期或2021年4月31日。用moment js或luxon能做到这一点吗?或者我应该使用另一种方法Date 2月30日这样的日子,date,validation,momentjs,luxon,Date,Validation,Momentjs,Luxon,我想验证以下日期是否有效: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或lux
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;
这可能会被压缩很多,但为了可读性,我已经尽可能使它膨胀
你可以很容易地把它变成一个函数,像这样(未测试)
如:注意:因为这反映了本机的日期
参数,所以月、小时、分钟、秒和毫秒都是零索引的。月份的年份和日期都是1索引的,因此您正在为3月31日创建一个有效日期的矩对象。
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;
}