2011-10-31 38 views
6

我试图让两个日期之间的工作日。 示例:stdate = 28/10/2011和endate = 04/11/2011。这应该是6个工作日,但它只给5天。使用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); 
} 

控制台日志显示下面的结果。

Friday 
Saturday 
Sunday 
Sunday 
Monday 
Tuesday 
Wednesday 
Thursday 

星期天由于某种原因显示两次。任何帮助,将不胜感激。

+0

你如何通过你的时间(开始和结束)的javascript?你会转换一个字符串吗? – emt14

回答

6

夏令时。

由于您正在为该日期添加24小时,所以仅在周日将您带到第二天是不够的,因为该特定星期日有25小时。

您应该添加的一天,而不是添加时间:

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

说明:当你调用Date构造器是超出范围的日期,它会automaticall换到下个月,即new Date(2010,9,32)给你是十一月的第一个。

2

你可以试试这个

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

代替

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

在这里你去:

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 

请记住,这两个变量的月显示为从零开始。所以在我的例子中,我们正在看十月(第十个月)。

+1

我改变了var currentDate = startDate; var var currentDate = new Date(startDate.getTime());以避免startDate变量的变化。 – Stanislav

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"; 

    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);