Javascript Single Date Check Script
30 November -0001
This function checks to make sure that the field named 'date' in the form 'theForm' on the page is in correct 'mm/dd/yyyy' format. Call it with 'return fixit()' in an onSubmit in the form tag. Below this function is another that checks for yyy-mm-dd format a little more elegantly by using regular expressions.
function checkIt() { /* Javascript date check by Justin Klein Keane Copyright (C) 2004 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Note the date field is named 'date' in the form 'theForm' */ var theDateString = document.theForm.date.value; var LenDateString = document.theForm.date.value.length; var monthEndsAt = theDateString.search('/'); if (monthEndsAt < 2) {alert ("Month must be two digits"); return false;} var LenRestOfString = (LenDateString - monthEndsAt); var monthYearString = theDateString.substr(monthEndsAt+1, LenRestOfString); var YearBeginsAt = monthYearString.search('/'); if (YearBeginsAt < 2) {alert ("Day must be two digits"); return false;} var endYearAt = (monthYearString.length) - YearBeginsAt + 1; var theYearString = monthYearString.substr(YearBeginsAt+1, endYearAt); if ((LenDateString < 8) || (LenDateString > 10)) {alert ("Improperly formatted date string (mm/dd/yyyy)"); return false; } // check to make sure the first slash is in the right place else if ((theDateString.substr(1,1) != "/") && (theDateString.substr(2,1) != "/")) {alert ("Improperly formatted date string (mm/dd/yyyy)"); alert ("The slashes aren't in the right place"); return false; } // check to make sure the month is not zero else if ((theDateString.substr(2,1) == '/') && (theDateString.substr(0,2) < 1)) {alert ("Improperly formatted date string (mm/dd/yyyy)"); return false; } // check to make sure the month is not greater than 12 else if ((theDateString.substr(2,1) == '/') && (theDateString.substr(0,2) > 12)) {alert ("Improperly formatted date string (mm/dd/yyyy)"); return false; } // check to make sure the second slash is in the right place else if ((monthYearString.substr(1,1) != "/") && (monthYearString.substr(2,1) != "/")) {alert ("Improperly formatted date string (mm/dd/yyyy)"); alert ("The slashes aren't in the right place"); return false; } // check to make sure the day isn't zero else if ((theDateString.substr(2,1) == '/') && (theDateString.substr(3,2) < 1)) {alert ("Improperly formatted date string (mm/dd/yyyy)"); return false; } // check to make sure the day isn't greater than 32 else if ((theDateString.substr(2,1) == '/') && (theDateString.substr(3,2) > 32)) {alert ("Improperly formatted date string (mm/dd/yyyy)"); return false; } // check to make sure the year is four digits else if (theYearString.length != 4) {alert ("The year needs to be four digits"); return false; } else { return true(); } } function valiDate() { /* Javascript date check by Justin Klein Keane Copyright (C) 2004 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ var myRegex = new RegExp("^[0-9]{4}\-([0][0-9]|[1][0-2])\-([0-2][0-9]|[3][0-1])$"); if (document.theForm.date.value.match(myRegex)) {//valid date format, check for valid date var theDay = Math.round(document.theForm.date.value.substr(8,2)); var theMonth = Math.round(document.theForm.date.value.substr(5,2)); var theYear = Math.round(document.theForm.date.value.substr(0,4)); if ((theYear%4 == 0) && (theDay > 29) && (theMonth == 2)) { alert ("Not a valid date."); return false; } else if ((theYear%4 != 0) && (theDay > 28) && (theMonth == 2)) { alert ("Not a valid date."); return false; } else if ((theDay > 30) && (theMonth == 4 || theMonth == 6 || theMonth == 0 || theMonth == 11)) { alert ("Not a valid date."); return false; } else { return true; } } else { alert ("Date not in correct yyyy-mm-dd format of the date specified does not exist."); return false; } }