Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 216
  • Last Modified:

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

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
arunatata
Asked:
arunatata
  • 2
1 Solution
 
dakydCommented:
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
 
arunatataAuthor Commented:
Thanks, that helped!!

A.
0
 
dakydCommented:
Sure thing, glad you got what you wanted.
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

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.

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