Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 2月30日这样的日子_Date_Validation_Momentjs_Luxon - Fatal编程技术网

Date 2月30日这样的日子

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

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

这可能会被压缩很多,但为了可读性,我已经尽可能使它膨胀

你可以很容易地把它变成一个函数,像这样(未测试)

如:注意:因为这反映了本机的
日期
参数,所以月、小时、分钟、秒和毫秒都是零索引的。月份的年份和日期都是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;
}