2011-10-31 12 views
6

Próbuję uzyskać dni robocze między dwiema datami. Przykład: stdate = 28/10/2011 i endate = 04/11/2011. Powinno to być 6 dni roboczych, ale to tylko 5 dni.Pierwsze dni pracy przy użyciu 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); 
} 

Log konsoli pokazuje poniższe wyniki.

Friday 
Saturday 
Sunday 
Sunday 
Monday 
Tuesday 
Wednesday 
Thursday 

Niedziela pokazuje dwa razy z jakiegoś powodu. Każda pomoc będzie doceniona.

+0

Jak zdać daty (początek i koniec) do javascript? Czy konwertujesz ciąg? – emt14

Odpowiedz

6

Czas letni.

W miarę dodawania 24 godzin do daty, nie wystarczy, aby dostać się do następnego dnia w niedzielę, ponieważ ta niedziela ma 25 godzin.

należy dodać jeden dzień zamiast godziny dodając:

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

Objaśnienie: Po wywołaniu konstruktora Date z datą, która jest poza zasięgiem, to automaticall zawijania do następnego miesiąca, tj new Date(2010,9,32) daje jesteś pierwszy listopada.

2

Można spróbować tej

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

zamiast

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

tu proszę:

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 

Należy pamiętać, że oznaczenie dla dwóch zmiennych miesięcy wynosi zero oparty . Tak więc w moim przykładzie patrzymy na październik (miesiąc 10).

+1

zmieniono var currentDate = startDate; do var currentDate = new Date (startDate.getTime()); aby uniknąć mutacji zmiennej startDate. – Stanislav

0

można uzyskać Data tygodnia od startDate i 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); 
Powiązane problemy