Solved

Javascript is not giving the correct output - problem with dates array

Posted on 2004-08-18
3
202 Views
Last Modified: 2010-04-06
Hi,

Probably need a second set of eyes to go over my code.

I am designing a vacation request form for my users. I have some javascript that accounts for holidays as well as weekends while calculating the number of days between two days.
I got most of this code functioning - however for some reason, my code is not reading the last array VacDays (list of holidays during the year) and taking them into account while doing the calculations for myTotal or RealTotal at the end.

Thus if I put start date = 02/13/2004 and end date = 02/17/2004 - it should be giving me two days between these two days instead of 3 as 02/16/2004 is listed as a holiday in the array VacDays. However its currently giving me 3 days - not sure where I am going wrong.

Please help!!

A.


function CalcVacDays(FirstDay, LastDay){
{
var FirstDay;
var LastDay;

FirstDay = new Date(document.myForm._1_1_7_1.value);
LastDay = new Date(document.myForm._1_1_8_1.value);

var d1v = FirstDay.valueOf();
var d2v = LastDay.valueOf();
d1v= Math.ceil((((d1v/1000)/60)/60)/24);
d2v= Math.ceil((((d2v/1000)/60)/60)/24);
if (d2v>=d1v)
{
     var TotalDays = d2v-d2v+1;
     
     myTotal.value = TotalDays;
     var RealTotal = TotalDays;
     

// Starting loop to figure time

var startCount
var sdate = 0
var sDate = FirstDate.getDay()


for(startCount=0, startCount<days,startCount++)
     {
          if ((sdate=5)||(sdate=6)) RealTotal--
               sdate++;
          if (sdate=7) sdate=0
     }

     var VacDays = new Array()
     VacDays[0]=new Date("01/01/2005")
     VacDays[0]=Math.ceil((((VacDays[0].valueOf()/1000)/60)/60)/24)
     VacDays[1]=new Date("01/02/2005")
     VacDays[1]=Math.ceil((((VacDays[0].valueOf()/1000)/60)/60)/24)
     VacDays[2]=new Date("02/16/2004")
     VacDays[2]=Math.ceil((((VacDays[1].valueOf()/1000)/60)/60)/24)
     VacDays[3]=new Date("05/31/2004")
     VacDays[3]=Math.ceil((((VacDays[2].valueOf()/1000)/60)/60)/24)
     VacDays[4]=new Date("07/05/2004")
     VacDays[4]=Math.ceil((((VacDays[3].valueOf()/1000)/60)/60)/24)
     VacDays[5]=new Date("09/06/2004")
     VacDays[5]=Math.ceil((((VacDays[4].valueOf()/1000)/60)/60)/24)
     VacDays[6]=new Date("11/25/2004")
     VacDays[6]=Math.ceil((((VacDays[5].valueOf()/1000)/60)/60)/24)
     VacDays[7]=new Date("11/26/2004")
     VacDays[7]=Math.ceil((((VacDays[6].valueOf()/1000)/60)/60)/24)
     VacDays[8]=new Date("12/24/2004")
     VacDays[8]=Math.ceil((((VacDays[7].valueOf()/1000)/60)/60)/24)
     VacDays[9]=new Date("12/27/2004")
     VacDays[9]=Math.ceil((((VacDays[8].valueOf()/1000)/60)/60)/24)
     VacDays[10]=new Date("12/28/2004")
     VacDays[10]=Math.ceil((((VacDays[9].valueOf()/1000)/60)/60)/24)
     VacDays[11]=new Date("12/29/2004")
     VacDays[11]=Math.ceil((((VacDays[10].valueOf()/1000)/60)/60)/24)
     VacDays[12]=new Date("12/31/2004")
     VacDays[12]=Math.ceil((((VacDays[10].valueOf()/1000)/60)/60)/24)

     var hvalue
     for (startCount=0,startCount<=12,startCount++)
     {
          hvalue=VacDays[startCount]
          if ((hvalue>=d2v) && (hvalue<=d1v))
               {
                 RealTotal--
               }
     }
          myTotal.value = RealTotal
document.write (RealTotal)


}

}
0
Comment
Question by:arunatata
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
LVL 19

Accepted Solution

by:
dakyd earned 200 total points
ID: 11844699
This section looks problematic:
for(startCount=0, startCount<days,startCount++)
     {
          if ((sdate=5)||(sdate=6)) RealTotal--
               sdate++;
          if (sdate=7) sdate=0
     }

You need to change the commas to semi-colons in the for loop.  The second thing that's weird is that you don't define days anywhere.  Odds are, your script is treating days as 0.  I think you meant this:
for(startCount=0; startCount<TotalDays; startCount++)
     {
          if ((sdate=5)||(sdate=6))
            RealTotal--
          sdate++;
          if (sdate=7) sdate=0;
     }


The second for loop also looks like it has a couple errors.  I think you want this:
     var hvalue;
     for (startCount=0;startCount<=12; startCount++)
     {
          hvalue=VacDays[startCount]
          if ((hvalue>=d1v) && (hvalue<=d2v))
               {
                 RealTotal--
               }
     }
d2v is greater/after d1v, so you want a value that is between d1v and d2v.  The way you had it before was decrementing RealTotal only if hValue was less than d1v and greater than d2v, which shouldn't ever happen.

Regardless, hope that helps.
0
 

Author Comment

by:arunatata
ID: 11845014
Thanks, that helped!!

A.
0
 
LVL 19

Expert Comment

by:dakyd
ID: 11845149
Sure thing, glad you got what you wanted.
0

Featured Post

Get HTML5 Certified

Want to be a web developer? You'll need to know HTML. Prepare for HTML5 certification by enrolling in July's Course of the Month! It's free for Premium Members, Team Accounts, and Qualified Experts.

Question has a verified solution.

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

I will show you how to create a ASP.NET Captcha control without using any HTTP HANDELRS or what so ever. you can easily plug it into your web pages. For Example a = 2 + 3 (where 2 and 3 are 2 random numbers) Session("Answer") = 5 then we…
I found this questions asking how to do this in many different forums, so I will describe here how to implement a solution using PHP and AJAX. The logical flow for the problem should be: Write an event handler for the first drop down box to get …
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …
Suggested Courses

630 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