-
-
Save arth2o/8471150 to your computer and use it in GitHub Desktop.
/** | |
* isValidDate(str) | |
* @param string str value yyyy-mm-dd | |
* @return boolean true or false | |
* IF date is valid return true | |
*/ | |
function isValidDate(str){ | |
// STRING FORMAT yyyy-mm-dd | |
if(str=="" || str==null){return false;} | |
// m[1] is year 'YYYY' * m[2] is month 'MM' * m[3] is day 'DD' | |
var m = str.match(/(\d{4})-(\d{2})-(\d{2})/); | |
// STR IS NOT FIT m IS NOT OBJECT | |
if( m === null || typeof m !== 'object'){return false;} | |
// CHECK m TYPE | |
if (typeof m !== 'object' && m !== null && m.size!==3){return false;} | |
var ret = true; //RETURN VALUE | |
var thisYear = new Date().getFullYear(); //YEAR NOW | |
var minYear = 1999; //MIN YEAR | |
// YEAR CHECK | |
if( (m[1].length < 4) || m[1] < minYear || m[1] > thisYear){ret = false;} | |
// MONTH CHECK | |
if( (m[2].length < 2) || m[2] < 1 || m[2] > 12){ret = false;} | |
// DAY CHECK | |
if( (m[3].length < 2) || m[3] < 1 || m[3] > 31){ret = false;} | |
return ret; | |
} |
thanks guys,
before end of function if not giving return true is that oke?
Why is a future year an invalid date? (m[1] > thisYear) ? If, for example you want to make an event for january 2015 and it's currently december 2014, this would be flagged as invalid. Perhaps this was for a specific case but in general, any future year should be a valid date.
@michaelsidler Thanks Michael (it looks was copy paste :))!
@afdil13 returned param ret is true or false and that's enough.
@percy3d it is a specific validation and there this parameter can't be higher then this year.
Modified little bit to give a more valid date
// DAY CHECK
if( (m[3].length < 2) || m[3] < 1 || ((["04","06","09","11"].indexOf(m[2]) > -1 && m[3] > 30 ) || m[3] > 31)){ret = false;}
// FEBRUARY CHECK
if( (m[2] == 2 && m[3] > 29) || (m[2] == 2 && m[3] > 28 && m[1]%4 != 0)){ret = false;}
It returned true even for 2017-02-31.
Corrected it
also add stop regex
var m = str.match(/(\d{4})-(\d{2})-(\d{2})$/);
because 2019-02-282 return true
also add stop regex
var m = str.match(/(\d{4})-(\d{2})-(\d{2})$/);
because 2019-02-282 return true
if we just want to check the format, this is the correct way to do it. i can use it in my vuelidate custom checker
Hey
You've forgotten to modify month and day check:
As per your code it checks m[1].length three times instead of testing m[2].length and m[3].length.
Cheers