Solved

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

Posted on 2004-08-18
3
169 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
  • 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

Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

When you work with shopping cart / ecommerce relates web sites, you need to pass the certain form post details to the payment gateway process page with required details for the products items you give to order. Also you may need to track the ordered…
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…
The viewer will learn how to count occurrences of each item in an array.
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)

747 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now