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

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;
     if(!addDay) return true;
     // 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];
     alert('Base:'+MM+'-'+DD+'-'+'20'+YY);
     if(!(DD < 32 && MM < 12 && YY.length == 2 )){ return false; }

     var theDate = new Date('20'+YY,MM,DD);
     alert('Before setDate:'+theDate);
     theDate.setDate(theDate.getDate()+addDay);
     alert('After setDate:'+theDate);

     theField.value=formatDateDDMONYY(theDate);
     return false;
0
BILL Carlisle
Asked:
BILL Carlisle
  • 4
  • 2
1 Solution
 
b0lsc0ttIT 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
 
b0lsc0ttIT 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
 
James RodgersWeb Applications DeveloperCommented:
can you post teh full function and the calls you are testing with
0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
BILL CarlisleAPEX 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)){
     //alert('Plus alone');
     // 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;
     if(!addDay) return true;
     // 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];
     alert('Base:'+MM+'-'+DD+'-'+'20'+YY);
     if(!(DD < 32 && MM < 12 && YY.length == 2 )){ return false; }

     var theDate = new Date('20'+YY,MM,DD);
     alert('Before setDate:'+theDate);
     theDate.setDate(theDate.getDate()+addDay);
     alert('Afetr setDate:'+theDate);

     theField.value=formatDateDDMONYY(theDate);
     return false;
  }
}
</script>
0
 
b0lsc0ttIT 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
 
BILL CarlisleAPEX 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
 
b0lsc0ttIT 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.

Join & Write a Comment

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

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