2017-08-12 3 views
1

Je travaille sur un problème où j'ai une date de début et un nombre de jours, donc quand un employé demande un congé pour 20 jours, alors la procédure est d'ajouter les jours à cette date, sans y compris les fins de semaine et les jours fériés afin d'obtenir la date à laquelle cette personne devrait reprendre son travail. Voici ce que j'ai travaillé avec jusqu'à présent. mais je suis à défaut d'obtenir une vraie date limite,Congé employé Calculer la date en Javascript

// fonction trie vacances

function isHoliday(dt, arr){ 
    var bln = false; 
     for (var i = 0; i < arr.length; i++) { 
      if (compare(dt, arr[i])) { //If days are not holidays 
       bln = true; 
       break; 
        } 
     } 
      return bln; 
    } 

// la fonction ci-dessous aide à la procédure de comparaison de vacances

function compare(dt1, dt2){ 
     var equal = false; 
      if(dt1.getDate() == dt2.getDate() && dt1.getMonth() == dt2.getMonth() && dt1.getFullYear() == dt2.getFullYear()) { 
      equal = true; 
     } 
     return equal; 
    } 

maintenant dans ma fonction principale J'essaie d'utiliser les jours fériés et week-ends et d'ajouter des jours à la date de début afin que je puisse archiver la date de fin. Je pense que je vais mal quelque part dans ce code et maintenant je suis pile ..

function returnfinaldate() 
    { 
    var holiday = []; 

    var cy = new Date().getFullYear(); 
    holiday[0] = new Date(cy, 1, 01); 
    holiday[1] = new Date(cy, 1, 26); 
    holiday[2] = new Date(cy, 2, 16); 
    holiday[3] = new Date(cy, 3, 08); 
    holiday[4] = new Date(cy, 3, 20); 
    holiday[5] = new Date(cy, 4, 14); 
    holiday[6] = new Date(cy, 4, 16); 
    holiday[7] = new Date(cy, 4, 17); 
    holiday[8] = new Date(cy, 5, 01); 
    holiday[9] = new Date(cy, 5, 14); 
    holiday[10] = new Date(cy, 6, 03); 
    holiday[11] = new Date(cy, 6, 09); 
    holiday[12] = new Date(cy, 6, 21); 
    holiday[13] = new Date(cy, 6, 21); 
    holiday[14] = new Date(cy, 6, 26); 
    holiday[15] = new Date(cy, 9, 02); 
    holiday[16] = new Date(cy, 9, 22); 
    holiday[17] = new Date(cy, 10, 09); 
    holiday[18] = new Date(cy, 12, 21); 
    holiday[19] = new Date(cy, 12, 25); 
    holiday[20] = new Date(cy, 12, 26); 

    var startDate = new Date(); 
    var endDate = new Date(); 

    startDate='8/1/2017'; 

    noOfDaysToAdd = 7, count = 0; 

    while (count < noOfDaysToAdd) { 
     endDate.setDate(endDate.getDate()+1) 
     // Date.getDay() gives weekday starting from 0(Sunday) to 
     // 6(Saturday) 
     if (endDate.getDay() != 0 && endDate.getDay() != 6 && !isHoliday(endDate, holiday)) { 
      count++; 
     } 
    } 

    return endDate; 
    } 

La date finale que je reçois est erronée. besoin d'aide ici.

+0

Votre 'endDate' est basé sur la date actuelle et non la version chaîne de' startDate' – charlietfl

Répondre

-1

utiliser ici la date de début en tant que point de départ du calcul des jours d'autre votre logique semble bien

function returnfinaldate() { 
      var holiday = []; 
      holiday[0] = new Date(2017, 9, 5);// holiday 1 
      holiday[1] = new Date(2017, 9, 6);//holiday 2 


      var startDate = new Date(); 
      var endDate = new Date(); 

      startDate = new Date(2017, 7, 1);// '8/1/2017'; 

      noOfDaysToAdd = 7, count = 0; 
      endDate = startDate; 
     //use below code to include start date in count else comment below code 
      // if (endDate.getDay() != 0 && endDate.getDay() != 6 && !isHoliday(endDate, holiday)) { 
      // count++; 
      // } 
      while (count < noOfDaysToAdd) { 
       endDate.setDate(endDate.getDate() + 1) 
       // Date.getDay() gives weekday starting from 0(Sunday) to 
       // 6(Saturday) 
       if (endDate.getDay() != 0 && endDate.getDay() != 6 && !isHoliday(endDate, holiday)) { 
        count++; 
       } 
      } 

      return endDate; 
     } 
+0

Thanx M. Yogesh. tu viens de me sauver la vie. ça marche si bien – Bels

+0

je viens de réaliser l'initialisation endDate = startDate; donne une date de fin avec un mois supplémentaire à l'avance – Bels

+0

En créant la date de début faire le mois commençant par 0 comme pour août son 7, si cela est correct alors s'il vous plaît fournissez moi l'exemple je vais regarder dedans – Yogesh