2011-10-31 39 views
6

Estoy tratando de obtener los días hábiles entre dos fechas. Ejemplo: stdate = 28/10/2011 y endate = 04/11/2011. Esto debería ser 6 días hábiles, pero solo da 5 días.Cómo obtener días laborables 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); 
} 

El registro de la consola muestra los resultados a continuación.

Friday 
Saturday 
Sunday 
Sunday 
Monday 
Tuesday 
Wednesday 
Thursday 

Domingo muestra dos veces por alguna razón. Cualquier ayuda sería apreciada.

+0

¿Cómo se pasan las fechas (inicio y fin) a la javascript? ¿TÚ conviertes una cuerda? – emt14

Respuesta

6

Horario de verano.

Como está agregando 24 horas para la fecha, no es suficiente para llegar al día siguiente del domingo, ya que ese domingo en particular tiene 25 horas.

Debe añadir al día en lugar de horas añadiendo:

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

Explicación: Cuando se llama al constructor Date con una fecha que está fuera de rango, se automaticall envoltura al siguiente mes, es decir new Date(2010,9,32) da tu el primero de noviembre.

2

Puede probar este

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

en lugar de

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

Aquí van:

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 

Tenga en cuenta que la indicación del mes para las dos variables es cero según las . Entonces, en mi ejemplo, estamos mirando octubre (mes 10).

+1

cambié var currentDate = startDate; a var currentDate = new Date (startDate.getTime()); para evitar la mutación de la variable startDate. – Stanislav

0

Puede obtener Fecha de semana a partir de StartDate y 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); 
Cuestiones relacionadas