<script language"javascript">
function WisLeap(year){
if (year % 4 != 0) {
return false;
}
if (year % 100 != 0){
return true
}
if(year % 400 == 0){
return false;
}
}
function Wdays_in(month, year){
var Wmonths = new Array(0,31,28,31,30,31,30,31,31,30,31,20,31) ;
if ((month<1) || (month>12)) {
return -1 ;
}
var rtdays = Wmonths[month] ;
if (month==2) {
if(WisLeap(year)) {
return 29 ;
}
}
return rtdays ;
}
// IsDateOK(myItem) -
//
// DATE VALIDATION FOR mm/dd/yyyy
//
// BASED ON TECHTIPS JAVASCRIPT FORUM FAQ
// Date format checking date format
// faq216-567 Thanks to SeAL
// Enhanced by Friendlyposter
//
//
// mm - 1 to 12 - 1 digit or 2 digits
// - leading space or zero optional before 1 to 9
//
//
//
// "1/31/2010" or "01/31/2010" or " 1/31/2010"
//
//
//
// dd - 1 to 31 - 1 digit or 2 digits
// - leading space or zero optional before 1 to 9
//
//
// "12/1/2010" or "12/01/2010" or "12/ 1/2010"
//
//
// dd must be valid for monthe and year specified
//
//
//
// yyyy - 0001 to 9999 - must be 4 digits
//
//
function IsDateOK(myItem){
var myDate, myD, myM, myY, myStr, myStr1, myStr2, myStr3, myYearDigit, myMonthDigit, myDayDigit ;
myStr = myItem + "" ;
if(myStr.indexOf('.')>-1) {
return false ;
}
myDate = myStr.split("/") ;
if(myDate.length!=3) {
return false ;
}
myStr1 = myDate[0] + "" ;
myMonthDigit = myStr1.length ;
myStr2 = myDate[1] + "" ;
myDayDigit = myStr2.length ;
myStr3 = myDate[2] + "" ;
myYearDigit = myStr3.length ;
if ( (myYearDigit != 4) || (myMonthDigit >2) || (myDayDigit >2) ) {
return false ;
}
myM = parseInt(myStr1,10) ;
myD = parseInt(myStr2,10) ;
myY = parseInt(myStr3,10) ;
if ( (myM!=myStr1) || (myD!=myStr2) || (myY!=myStr3) ) {
return false ;
}
if ( (myY < 1) || (myD < 1)
|| (myM < 1) || (myM > 12)
|| (myD > Wdays_in(myM, myY)) ) {
return false ;
} else {
return true ;
}
};
// *** VALIDATION BASED ON DATE OBJECT ALONE
function DATEIsDateOK(str) {
var d = new Date(str);
if (isNaN(d)) {
return false; // invalid date
}
else {
return true; // valid date
}
}
// * * * S E L F T E S T S E C T I O N * * *
// ** SAMPLE SELF-TEST WITH GOOD AND BAD USE CASES
var XXbaddates = new Array("31/03/2000", "//2000", "1/1/2003/2err", "1/1./2003", " ",
"30/0/2020", "6/0/2060", "1/1/1", "9/9/9,999", "13/1/2000",
"0/0/2020", "6/-6/2060", "1./1/1", "90/9/9999", "13/1.0/2000",
"1//2000 ", "/1/2000", "02/29/2001", "31/0/2000", "3/1/20.0",
"1/1/ 2000 ", " / / 2000", "02/29/2009", "02/29/2000", "1 / 1 / 2000",
"mm/dd/yyyy", "", "00/31/2000", "04/31/2000", "6/31/2000",
"09/31/2000", "0/0/0000", "1a/1/2003", "1/1b/2003", "6/06/2,004",
"003/31/2000", "1/030/0000", "19/19/1919", "1/44/2003", "6/00/2004",
"02/29/1600", "2/29/2005", "1/1/200a", "1/32/2003", "1/001/2004",
"1/1/0000", "-1/1/2000", "1/1.5/2000", "1/1/2000.") ;
var XXgooddates = new Array("02/29/2004", "12/31/2000", "01/31/1999", "1/1/2000", "4/14/4444",
"03/31/2010", "08/31/2020", "09/30/2030", "8/1/2040", "6/30/6666",
" 3/31/2010", " 4/1/2010", "4/ 2/2010", "4/ 3/2010", " 4/ 4/2010",
"03/31/2010", "04/1/2010", "4/02/2010", "4/3/2010", "04/04/2010",
"03/30/2010", "08/11/2020", "01/30/2030", "2/29/1604", "06/30/1900",
"10/27/2010", "02/28/2011", "2/28/2112", "2/29/2016", "06/30/2019",
"02/27/2010", "02/29/0404", "2/28/0400", "2/29/0004", "06/30/0999",
"01/29/2051", "1/1/2002", "9/9/9999", "1/1/0001") ;
// PASS 1 - USING CUSTOM DATE VALIDATION FOR mm/dd/yyyy
var XXretvals = new Array() ;
XXretvals[XXretvals.length] = " All Bad Dates s/b False =" ;
for (var i = 0; i<XXbaddates.length; i++) {
var s = XXbaddates[i] ;
XXretvals[XXretvals.length] = IsDateOK(s) ;
}
XXretvals[XXretvals.length] = "\n All Good Dates s/b True =" ;
for (var i = 0; i<XXgooddates.length; i++) {
var s = XXgooddates[i] ;
XXretvals[XXretvals.length] = IsDateOK(s) ;
}
alert(XXretvals) ;
// PASS 2 - SELF-TEST USING DATE OBJECT VALIDATION ALONE
XXretvals.length=0 ;
XXretvals[XXretvals.length] = " All Bad Dates s/b False =" ;
for (var i = 0; i<XXbaddates.length; i++) {
var s = XXbaddates[i] ;
XXretvals[XXretvals.length] = DATEIsDateOK(s) ;
}
XXretvals[XXretvals.length] = "\n All Good Dates s/b True =" ;
for (var i = 0; i<XXgooddates.length; i++) {
var s = XXgooddates[i] ;
XXretvals[XXretvals.length] = DATEIsDateOK(s) ;
}
alert(XXretvals) ;
</script>