Last active
September 30, 2020 11:27
-
-
Save arth2o/8471150 to your computer and use it in GitHub Desktop.
Javascript function: validate date (yyyy-mm-dd) format via JavaScript.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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; | |
} |
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@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.