Solved

Date manipulation giving wierd results

Posted on 2007-11-15
7
154 Views
Last Modified: 2011-09-20
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
Comment
Question by:bcarlis
  • 4
  • 2
7 Comments
 
LVL 54

Expert Comment

by:b0lsc0tt
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

by:b0lsc0tt
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

by:James Rodgers
ID: 20293100
can you post teh full function and the calls you are testing with
0
Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

 
LVL 2

Author Comment

by:bcarlis
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;
  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
 
LVL 54

Accepted Solution

by:
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

by:bcarlis
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

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

bol
0

Featured Post

Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Angular - example works but my data is different 13 26
add a 3rd selection to sum 7 27
HTML5 Looping table certain Cell 11 37
Passport Expiry 3 44
This article will give core knowledge of JavaScript and will head in to your first JavaScript program. I am Durvesh Naik and I am here to deal with this series of JavaScript. I will teach you JavaScript in part wise , as its quite boring to read big…
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…

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question