Is Date //JavaScript Function
Checks if a date is valid and returns error codes described bellow.
[UPDATED CODE AND HELP CAN BE FOUND HERE]
//+ Jonas Raoni Soares Silva //@ http://jsfromhell.com/geral/is-date [v1.0] isDate = function(y, m, d){ //v1.0 if(typeof y == "string" && m instanceof RegExp && d){ if(!m.test(y)) return 1; y = RegExp["$" + d.y], m = RegExp["$" + d.m], d = RegExp["$" + d.d]; } d = Math.abs(d) || 0, m = Math.abs(m) || 0, y = Math.abs(y) || 0; return arguments.length != 3 ? 1 : d < 1 || d > 31 ? 2 : m < 1 || m > 12 ? 3 : /4|6|9|11/.test(m) && d == 31 ? 4 : m == 2 && (d > ((y = !(y % 4) && (y % 1e2) || !(y % 4e2)) ? 29 : 28)) ? 5 + !!y : 0; };
Usage
<script type="text/javascript"> getDateMsg = function(x){ return x == 0 ? "Valid Date" : x == 1 ? "Invalid date format" : x == 2 ? "Invalid day" : x == 3 ? "Invalid month" : x == 4 ? "In April, June, September and November there's no 31 day" : x == 5 ? "February has only 28 days" : x == 6 ? "In leap years, February has 29 days": "nothing =]"; }; var x = [ isDate("22/07/1984", /^([0-9]{1,2})[\/]([0-9]{1,2})[\/]([0-9]{1,4})$/, {d: 1, m: 2, y: 3}), isDate("1984-07-22", /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/, {d: 3, m: 2, y: 1}), isDate("07-22-1984", /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/, {d: 3, m: 2, y: 1}), isDate(2000, 1, 32), isDate(2000, 0, 1), isDate(2000, 4, 31), isDate(2001, 2, 29), isDate(2004, 2, 30) ]; for(var i = -1, l = x.length; ++i < l; document.write(getDateMsg(x[i]), "<br />")); </script>
Help
isDate(y: Integer, m: Integer, d: Integer): Integer Checks a date and returns 0 if it's valid or one of the error codes bellow. y year m month d day isDate(date: String, matcher: RegExp, map: Object): Integer Checks a date and returns 0 if it's valid or one of the error codes bellow. date date in a string form matcher regular expression responsible to find and store the day, month and year map object containing the position where each date component is localized inside the regular expression. Its format is the following: {d: positionOfTheDay, m: positionOfTheMonth, y: positionOfTheYear} Return codes * 0 = Valid date * 1 = Date format invalid (regular expression failed or amount of arguments != 3) * 2 = Day isn't between 1 and 31 * 3 = Month isn't between 1 and 12 * 4 = On April, June, September and November there isn't the day 31 * 5 = On February the month has only 28 days * 6 = Leap year, February has only 29 days