-2

My requirement is below. Can someone suggest how to validate the given dates below ?

Valid dates : 1/1/2017 01/1/2017 1/01/2017 01/01/2017

Invalid dates : 13/12/2017 13/13/2017 12/35/2017 13/13/2017

Soumya Behera
  • 2,325
  • 4
  • 15
  • 25

1 Answers1

1

function validateDate(dateStr) {
   const regExp = /^(\d\d?)\/(\d\d?)\/(\d{4})$/;
   let matches = dateStr.match(regExp);
   let isValid = matches;
   let maxDate = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
   
   if (matches) {
     const month = parseInt(matches[1]);
     const date = parseInt(matches[2]);
     const year = parseInt(matches[3]);
     
     isValid = month <= 12 && month > 0;
     isValid &= date <= maxDate[month] && date > 0;
     
     const leapYear = (year % 400 == 0)
        || (year % 4 == 0 && year % 100 != 0);
     isValid &= month != 2 || leapYear || date <= 28; 
   }
   
   return isValid
}

console.log(['1/1/2017', '01/1/2017', '1/01/2017', '01/01/2017', '13/12/2017', '13/13/2017', '12/35/2017'].map(validateDate));

My previous answer is not working on Edge.

Daniel Tran
  • 6,083
  • 12
  • 25