• Status: Solved
• Priority: Medium
• Security: Public
• Views: 163

# Date manipulation giving wierd results

Hi,
I'm stumped again...
For the date entered 18-FEB-11
alert('Base:'+MM+'-'+DD+'-'+'20'+YY);   shows Base: 2-18-2011
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
BILL Carlisle
• 4
• 2
1 Solution

IT ManagerCommented:
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

IT ManagerCommented:
It looks like you could fix it with ...

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

Let me know if you have a question.

bol
0

Web Applications DeveloperCommented:
can you post teh full function and the calls you are testing with
0

APEX DeveloperAuthor Commented:
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;
var addDay = 0;
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

IT ManagerCommented:
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

APEX DeveloperAuthor Commented:
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

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

bol
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

## Featured Post

• 4
• 2
Tackle projects and never again get stuck behind a technical roadblock.