2011-10-31 38 views
6

Tôi đang cố gắng để có được những ngày làm việc giữa hai ngày. Ví dụ: stdate = 28/10/2011 và endate = 04/11/2011. Điều này nên được 6 ngày làm việc, nhưng nó chỉ cho 5 ngày.Lấy ngày làm việc bằng cách sử dụng 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); 
} 

Nhật ký bảng điều khiển hiển thị kết quả bên dưới.

Friday 
Saturday 
Sunday 
Sunday 
Monday 
Tuesday 
Wednesday 
Thursday 

Chủ nhật hiển thị hai lần vì một lý do nào đó. Bất kỳ trợ giúp sẽ được đánh giá cao.

+0

Làm thế nào để bạn vượt qua ngày của bạn (bắt đầu và kết thúc) để javascript? Bạn có chuyển đổi một chuỗi không? – emt14

Trả lời

6

Thời gian tiết kiệm ánh sáng ban ngày.

Khi bạn thêm 24 giờ cho đến ngày, bạn không đủ để đưa bạn đến ngày hôm sau vào chủ nhật, vì ngày chủ nhật cụ thể đó có 25 giờ.

Bạn nên thêm một ngày thay vì giờ thêm:

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

Giải thích: Khi bạn gọi constructor Date với một ngày đó là ra khỏi phạm vi, nó sẽ automaticall quấn vào tháng tới, tức là new Date(2010,9,32) cho bạn là người đầu tiên của tháng mười một.

2

Bạn có thể thử này

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

ở vị trí của

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

Ở đây bạn đi:

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 

Hãy ghi nhớ rằng những dấu hiệu cho thấy tháng đối với hai biến là số không dựa . Vì vậy, trong ví dụ của tôi, chúng tôi đang xem xét tháng mười (tháng 10).

+1

tôi đã thay đổi var currentDate = startDate; đến var currentDate = new Date (startDate.getTime()); để tránh đột biến biến startDate. – Stanislav

0

Bạn có thể lấy ngày trong tuần từ StartDate và 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); 
Các vấn đề liên quan