2011-10-31 41 views
6

Sto cercando di ottenere i giorni lavorativi tra due date. Esempio: stdate = 28/10/2011 e endate = 04/11/2011. Questo dovrebbe essere di 6 giorni lavorativi, ma è solo dando 5 giorni.Ottenere giorni lavorativi usando Javascript

var workingdays = 0; 
var weekday  = new Array(7); 
weekday[0]="Sunday"; 
weekday[1]="Monday"; 
weekday[2]="Tuesday"; 
weekday[3]="Wednesday"; 
weekday[4]="Thursday"; 
weekday[5]="Friday"; 
weekday[6]="Saturday"; 

while (stdate <= endate) 
{ 
    var day = weekday[stdate.getDay()]; 
    if(day != "Saturday" && day != "Sunday") 
    { 
     workingdays++; 
    } 
    console.log(weekday[stdate.getDay()]); 
    stdate = new Date(stdate.getTime() + 86400000); 
} 

Il registro della console mostra i risultati seguenti.

Friday 
Saturday 
Sunday 
Sunday 
Monday 
Tuesday 
Wednesday 
Thursday 

spettacoli di domenica due volte per qualche motivo. Qualsiasi aiuto sarebbe apprezzato.

+0

Come passate le date (inizio e fine) per il javascript? Converti una stringa? – emt14

risposta

6

Ora legale.

Come si aggiunge 24 ore alla data, non è sufficiente per arrivare al giorno successivo la domenica, come quella particolare domenica ha 25 ore.

Si dovrebbe aggiungere un giorno invece di ore aggiungendo:

stdate = new Date(stdate.getFullYear(), stdate.getMonth(), stdate.getDate() + 1); 

Spiegazione: Quando si chiama il Date costruttore con una data che è fuori campo, si automaticall impacco al mese successivo, vale a dire new Date(2010,9,32) dà tu il primo di novembre.

2

Si può provare questo

stdate.setDate(stdate.getDate()+1); 

al posto di

stdate = new Date(stdate.getTime() + 86400000); 
7

Qui si va:

function getWorkingDays(startDate, endDate){ 
    var result = 0; 

    var currentDate = startDate; 
    while (currentDate <= endDate) { 

     var weekDay = currentDate.getDay(); 
     if(weekDay != 0 && weekDay != 6) 
      result++; 

     currentDate.setDate(currentDate.getDate()+1); 
    } 

    return result; 
} 

var begin = new Date(2011, 09, 8); 
var end = new Date(2011, 09, 25); 
alert(getWorkingDays(begin, end)); // result = 12 days 

Tenete a mente che l'indicazione mese per le due variabili è base zero . Quindi nel mio esempio stiamo guardando ad ottobre (mese 10).

+1

ho cambiato var currentDate = startDate; a var currentDate = new Date (startDate.getTime()); per evitare la mutazione della variabile startDate. – Stanislav

0

È possibile ottenere Data di settimana a partire da StartDate e EndDate

var weekday = new Array(7); 
    weekday[0] = "Sunday"; 
    weekday[1] = "Monday"; 
    weekday[2] = "Tuesday"; 
    weekday[3] = "Wednesday"; 
    weekday[4] = "Thursday"; 
    weekday[5] = "Friday"; 
    weekday[6] = "Saturday"; 

    var object = []; 


    function getTuesday(startDate, endDate, n) { 

     var currentDate = startDate; 
     while (currentDate <= endDate) { 
      if (weekday[currentDate.getDay()] === weekday[n]) 
       object.push(currentDate + "\n"); 
      currentDate.setDate(currentDate.getDate() + 1); 
     } return object; 
    } 

    var begin = new Date(2015, 11, 08); 

    var end = new Date(2016, 01, 08); 

    alert(getTuesday(begin, end, 3) + "\n Total date or week: " + object.length); 
Problemi correlati