Solved

Date manipulation giving wierd results

Posted on 2007-11-15
156 Views
Hi,
I'm stumped again...
For the date entered 18-FEB-11
alert('Before setDate:'+theDate);       shows Before setDate: Fri Mar 18 00:00:00 CDT 2011
alert('After setDate:'+theDate);        shows After setDate: Sat Mar 19 00:00:00 CDT 2011

How is it incrementing the Month too?

var MM = mon[fV[1].toUpperCase()]+1;   is adding one to the array value of 0-11
and it is before the increment of the month occurs.

} else {
// See if done entering the date before checking for plus/minus sign
//   the minus sign is the same as hyphen used in DD-MON-YY
if(theField.value.length != 9) return true;
// 2. Check if the key was a plus/minus sign to
//  increment or decrement
if(keyCode==187 || keyCode==107) addDay = +1;
if(keyCode==189 || keyCode==109) addDay = -1;
// Don't validate unless date is in DD-MON-YY foramt.
var fV = theField.value.split("-");
if(fV.length!=3) return true;
var DD = fV[0];
var MM = mon[fV[1].toUpperCase()]+1;
var YY = fV[2];
if(!(DD < 32 && MM < 12 && YY.length == 2 )){ return false; }

var theDate = new Date('20'+YY,MM,DD);

theField.value=formatDateDDMONYY(theDate);
return false;
0
Question by:bcarlis
• 4
• 2

LVL 54

Expert Comment

ID: 20293037
bcarlis,

The month is getting messed up the first time you set it.  It is wrong in the Before step.  In Javascript the month count starts at 0 (e.g. Jan = 0).  You will need to subtract 1 from the figure you put in the string to make the date.

Let me know if you have any questions or need more information.

b0lsc0tt
0

LVL 54

Expert Comment

ID: 20293063
It looks like you could fix it with ...

var MM = mon[fV[1].toUpperCase()];

Let me know if you have a question.

bol
0

LVL 25

Expert Comment

ID: 20293100
can you post teh full function and the calls you are testing with
0

LVL 2

Author Comment

ID: 20293709
he whole tamale:

<script language="JavaScript" type="text/javascript">
function dateIncrDecr(theField,e){
var monthname=new Array("JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC")
var mon = {JAN:0,FEB:1,MAR:2,APR:3,MAY:4,JUN:5,JUL:6,AUG:7,SEP:8,OCT:9,NOV:10,DEC:11};

var keyCode = (e.which)?e.which:e.keyCode;
function formatDateDDMONYY(pDate){
var DD = pDate.getDate();
DD=""+ DD;
if ((DD.length) < 2) DD = "0" + DD;
var YY = pDate.getFullYear();
YY =""+YY;
return DD+"-"+monthname[pDate.getMonth()]+"-"+YY.substr(2,2);
}
// 1. Check if the only value of the field is a plus sign
if(theField.value=='' && (keyCode==187 || keyCode==107)){
// If yes, set it to today's date
var theDate = new Date();
theField.value=formatDateDDMONYY(theDate);
return false;

} else {
// See if done entering the date before checking for plus/minus sign
//   the minus sign is the same as hyphen used in DD-MON-YY
if(theField.value.length != 9) return true;
// 2. Check if the key was a plus/minus sign to
//  increment or decrement
if(keyCode==187 || keyCode==107) addDay = +1;
if(keyCode==189 || keyCode==109) addDay = -1;
// Don't validate unless date is in DD-MON-YY foramt.
var fV = theField.value.split("-");
if(fV.length!=3) return true;
var DD = fV[0];
var MM = mon[fV[1].toUpperCase()]+1;
var YY = fV[2];
if(!(DD < 32 && MM < 12 && YY.length == 2 )){ return false; }

var theDate = new Date('20'+YY,MM,DD);

theField.value=formatDateDDMONYY(theDate);
return false;
}
}
</script>
0

LVL 54

Accepted Solution

b0lsc0tt earned 75 total points
ID: 20293897
Did you try my suggestion?  Let me know if you have a question about anything I said.  The problem is occurs before you use setDate() and should be fixed by the correction I suggested.

bol
0

LVL 2

Author Comment

ID: 20300764
Yes, I see... I had added the one to have it display what it was in the alert BUT it caused it to add to the incremented date.

Simple... Thank you !!

Bill
0

LVL 54

Expert Comment

ID: 20300797
Your welcome!  I'm glad I could help.  Thanks for the grade, the points and the fun question.

bol
0

Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction HTML checkboxes provide the perfect way for a web developer to receive client input when the client's options might be none, one or many.  But the PHP code for processing the checkboxes can be confusing at first.  What if a checkbox is…
Boost your ability to deliver ambitious and competitive web apps by choosing the right JavaScript framework to best suit your project’s needs.
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…