Javascript Date Validation in MM/DD/YYY output format

P

pmarisole

The following javascript code gives me the date validation that I need
except
after the correct date is entered into the field, it puts the date in
the wrong format

EXAMPLE: User enters 2/14/2006 and it shows in the field Feb 14 2006
after the onBlur
I want it to leave the formatting of the date in the field as 2/14/2006

and not change the input to Feb 14 2006


I am very new to javascript and I don't know what to take out in the
following code to accomplish what I need. Can Anyone HELP? Thanks so
much


<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
function checkdate(objName) {
var datefield = objName;
if (chkdate(objName) == false) {
datefield.select();
alert("That date is invalid. Please try again.");
datefield.focus();
return false;


}


else {
return true;
}

}


function chkdate(objName) {
var strDatestyle = "US"; //United States date style
//var strDatestyle = "EU"; //European date style
var strDate;
var strDateArray;
var strDay;
var strMonth;
var strYear;
var intday;
var intMonth;
var intYear;
var booFound = false;
var datefield = objName;
var strSeparatorArray = new Array("-"," ","/",".");
var intElementNr;
var err = 0;
var strMonthArray = new Array(12);
strMonthArray[0] = "Jan";
strMonthArray[1] = "Feb";
strMonthArray[2] = "Mar";
strMonthArray[3] = "Apr";
strMonthArray[4] = "May";
strMonthArray[5] = "Jun";
strMonthArray[6] = "Jul";
strMonthArray[7] = "Aug";
strMonthArray[8] = "Sep";
strMonthArray[9] = "Oct";
strMonthArray[10] = "Nov";
strMonthArray[11] = "Dec";
strDate = datefield.value;
if (strDate.length < 1) {
return true;

}


for (intElementNr = 0; intElementNr < strSeparatorArray.length;
intElementNr++) {
if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
strDateArray = strDate.split(strSeparatorArray[intElementNr]);
if (strDateArray.length != 3) {
err = 1;
return false;

}


else {
strDay = strDateArray[0];
strMonth = strDateArray[1];
strYear = strDateArray[2];

}


booFound = true;
}

}


if (booFound == false) {
if (strDate.length>5) {
strDay = strDate.substr(0, 2);
strMonth = strDate.substr(2, 2);
strYear = strDate.substr(4);
}

}


if (strYear.length == 2) {
strYear = '20' + strYear;

}


// US style
if (strDatestyle == "US") {
strTemp = strDay;
strDay = strMonth;
strMonth = strTemp;

}


intday = parseInt(strDay, 10);
if (isNaN(intday)) {
err = 2;
return false;

}


intMonth = parseInt(strMonth, 10);
if (isNaN(intMonth)) {
for (i = 0;i<12;i++) {
if (strMonth.toUpperCase() == strMonthArray.toUpperCase()) {
intMonth = i+1;
strMonth = strMonthArray;
i = 12;
}

}


if (isNaN(intMonth)) {
err = 3;
return false;
}

}


intYear = parseInt(strYear, 10);
if (isNaN(intYear)) {
err = 4;
return false;

}


if (intMonth>12 || intMonth<1) {
err = 5;
return false;

}


if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7
|| intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31
|| intday < 1)) {
err = 6;
return false;

}


if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11)

&& (intday > 30 || intday < 1)) {
err = 7;
return false;

}


if (intMonth == 2) {
if (intday < 1) {
err = 8;
return false;

}


if (LeapYear(intYear) == true) {
if (intday > 29) {
err = 9;
return false;

}
}


else {
if (intday > 28) {
err = 10;
return false;

}
}
}


if (strDatestyle == "US") {
datefield.value = strMonthArray[intMonth-1] + " " + intday+" " +
strYear;

}


else {
datefield.value = intday + " " + strMonthArray[intMonth-1] + " " +
strYear;

}
return true;
}


function LeapYear(intYear) {
if (intYear % 100 == 0) {
if (intYear % 400 == 0) { return true; }

}


else {
if ((intYear % 4) == 0) { return true; }

}
return false;
}


function doDateCheck(from, to) {
if (Date.parse(from.value) <= Date.parse(to.value)) {
alert("The dates are valid.");

}


else {
if (from.value == "" || to.value == "")
alert("Both dates must be entered.");
else
alert("To date must occur after the from date.");
}

}


// End -->
</script>
 
T

Tony

pmarisole said:
The following javascript code gives me the date validation that I need
except
after the correct date is entered into the field, it puts the date in
the wrong format

EXAMPLE: User enters 2/14/2006 and it shows in the field Feb 14 2006
after the onBlur
I want it to leave the formatting of the date in the field as 2/14/2006

and not change the input to Feb 14 2006

I'm not going to give you the answer - but I'll help you to learn the
answer yourself:

Research the Javascript Date() object - I would recommend using the
Javascript object reference on w3schools. You will find that there are
ways to get the numerical month, day of the month, and full year
separatly. Using those, you can create a string with whatever
formatting you want.
 
R

RobG

pmarisole said:
The following javascript code gives me the date validation that I need
except
after the correct date is entered into the field, it puts the date in
the wrong format

EXAMPLE: User enters 2/14/2006 and it shows in the field Feb 14 2006
after the onBlur
I want it to leave the formatting of the date in the field as 2/14/2006

and not change the input to Feb 14 2006

Most of all you need to know is here:

<URL:http://www.merlyn.demon.co.uk/js-date9.htm>


You will also find ways of validating dates that are much more concise
than what you've posted.

Month, day, year format is used in only one country that I know of -
pretty much the entire rest of the world uses either day, month, year or
year, month, day.

Read about ISO 8601 date formats, here's a piece by the University of
Illinois on why you should be using them:

I am very new to javascript and I don't know what to take out in the
following code to accomplish what I need. Can Anyone HELP? Thanks so
much

Read about date validation either by searching the archives here or use
this:

<URL:http://www.merlyn.demon.co.uk/js-date4.htm>

[...]
 
D

Dr John Stockton

JRS: In article <[email protected]>,
dated Wed, 15 Feb 2006 10:52:37 remote, seen in
news:comp.lang.javascript said:
function LeapYear(intYear) {
if (intYear % 100 == 0) {
if (intYear % 400 == 0) { return true; }

}


else {
if ((intYear % 4) == 0) { return true; }

}
return false;
}


The code performs two tests first to get a return which only occurs for
one year in 400. Performing the 4-year test first gives a finished
result three times out of four. While speed will not be critical,
there's no point in using a really silly method.

Did all that code come off the Web, out of a book, or from a teacher; or
was it your own invention? I'd not use any of it.

As an exercise, write the LeapYear function efficiently. Then delete
it, because it is not needed.

Read the newsgroup FAQ; see below.

The sensible way to input and output dates is given by ISO 8601 - as
YYYY-MM-DD - which has been incorporated as National Standards
throughout the civilised world.


*** DO NOT MULTI-POST ***

*** AND FIND OUT THAT VBSCRIPT IS NOT JAVASCRIPT ***

*** AND CHECK YOUR SUBJECT LINE BEFORE POSTING ***
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,534
Members
45,007
Latest member
obedient dusk

Latest Threads

Top