Foros del Web » Programando para Internet » Javascript »

Calcualr días laborables entre dos fechas

Estas en el tema de Calcualr días laborables entre dos fechas en el foro de Javascript en Foros del Web. Hola, necesito realizar un script para calcular los días laborales entre dos fechas. Sólo necesito el cálculo de los fines de semana, el tema de ...
  #1 (permalink)  
Antiguo 31/07/2007, 04:25
 
Fecha de Ingreso: agosto-2003
Mensajes: 72
Antigüedad: 21 años, 3 meses
Puntos: 0
Calcualr días laborables entre dos fechas

Hola, necesito realizar un script para calcular los días laborales entre dos fechas. Sólo necesito el cálculo de los fines de semana, el tema de festivos no sería necesario aunque vi un script php donde permitía introducir en un array los festivos que te convinieran, esto está bien para las fiestas nacionales y locales.
Bueno, sabéis de algún script parecido. He estado buscando bastante y no encontrado nada. Hay algunos en ASP , pero yo sólo trabajo con PHP y actionscript y poco de javascript , así que no se cómo lo haré

Gracias.
  #2 (permalink)  
Antiguo 01/08/2007, 08:05
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 1 mes
Puntos: 45
Re: Calcualr días laborables entre dos fechas

Bueno, sin calcular días de festividad sería fácil. Basta con sumar día por día, pero si es sábado o domingo no contabilizar como sumado el día, y seguir sumando. Es decir:

Hoy es viernes, sumo uno. Es sábado, entonces la suma no cuenta, luego sigo sumando uno. Es domingo, entonces la suma no cuenta, luego sigo sumando uno. Es lunes.


Así podemos conseguir sumar tantos días como quieras con un simple bucle (de aquí seguramente sólo te interese el método en cuestión, pero he puesto el resto más que nada porque ayudan a ver la fecha mas bonita )

Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<
html>
<
head>
<
titlePágina nueva </title>
<
meta name="Author" content="derkeNuke">
<
style type="text/css">
</
style>
</
head>

<
body>

<
script type="text/javascript">
function 
e(q,br) {
document.body.appendChilddocument.createTextNode(q) );
if(!
brdocument.body.appendChilddocument.createElement("BR") );
}

// Creo una fecha
var hoy = new Date();

// Nuestro método para sumar n dias (que no sean ni Sábado ni Domingo)
Date.prototype.sumarLaborables = function(n) {
    for(var 
i=0i<ni++) {
        
this.setTimethis.getTime()+24*60*60*1000 );
        if( (
this.getDay()==6) || (this.getDay()==0) )    // sábado o domingo
            
i--;            // hacemos el bucle una unidad mas larga.
    
}
    return 
this;
}

// COMPLETAMOS CON CEROS A LA IZQUIERDA AQUELLOS VALORES QUE LO NECESITEN PARA VERLOS BONITOS
Date.prototype.getXXXzeroFilled = function(propiedad) {
    var 
dev this["get"+propiedad]();
    if( (
propiedad=="Milliseconds") && (dev<100) && (dev>9) ) dev "0"+dev;
    else if( 
dev<10 dev = (propiedad=="Milliseconds")?"00":"0"+dev;
    return 
dev.toString();
}
Date.prototype.getHoursZeroFilled = function() { return this.getXXXzeroFilled("Hours"); }
Date.prototype.getMinutesZeroFilled = function() { return this.getXXXzeroFilled("Minutes"); }
Date.prototype.getSecondsZeroFilled = function() { return this.getXXXzeroFilled("Seconds"); }
Date.prototype.getMillisecondsZeroFilled = function() { return this.getXXXzeroFilled("Milliseconds"); }



// REESCRIBIMOS EL MÉTODO TOSTRING() PARA REPRESENTARLO EN CASTELLANO BONITO
Date.prototype.toString = function() {
    var 
diaSem = ["Domingo""Lunes""Martes""Miércoles""Jueves""Viernes""Sábado"][ this.getDay() ];
    var 
mes "Enero;Febrero;Marzo;Abril;Mayo;Junio;Julio;Agosto;Septiembre;Octubre;Noviembre;Diciembre".split(";")[this.getMonth()];
    var 
str diaSem+", "+this.getDate()+" de "+mes+" de "+this.getFullYear()+" a las "+this.getHoursZeroFilled()+":"+this.getMinutesZeroFilled()+":"+this.getSecondsZeroFilled()+" "+this.getMillisecondsZeroFilled()+".";
    return 
str;
}

e(hoy);
for(var 
i=0i<15i++) {
    
hoy.sumarLaborables(1);
    
ehoy );
}

e(""); e("");
e( new Date().sumarLaborables(15) );

</script>
</body>
</html> 
Puedes sumar la cantidad de días laborables que quieras, como ves.


Con días festivos, bastaría con tenerlos en un array y comprobar (tal y como hacemos con los sábados y domingos) si el día cuenta como laborable o no.


Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #3 (permalink)  
Antiguo 17/06/2010, 11:17
 
Fecha de Ingreso: noviembre-2004
Mensajes: 371
Antigüedad: 20 años
Puntos: 0
Respuesta: Calcualr días laborables entre dos fechas

Estimado copie el codigo tal cual y me entrega un error de js.

document.body is null or not an object

disculpa pero no soy muy amigo de este tipo de codigo para solucionar este problema por eso pido tu ayuda.

saludos.
  #4 (permalink)  
Antiguo 17/06/2010, 13:06
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 10 meses
Puntos: 126
Respuesta: Calcualr días laborables entre dos fechas

Cita:
Iniciado por bitshoot Ver Mensaje
Estimado copie el codigo tal cual y me entrega un error de js.

document.body is null or not an object

disculpa pero no soy muy amigo de este tipo de codigo para solucionar este problema por eso pido tu ayuda.

saludos.
Sin palabras
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #5 (permalink)  
Antiguo 18/06/2010, 10:10
 
Fecha de Ingreso: noviembre-2004
Mensajes: 371
Antigüedad: 20 años
Puntos: 0
Respuesta: Calcualr días laborables entre dos fechas

bueno el error me da en:

function e(q,br) {
document.body.appendChild( document.createTextNode(q) );
if(!br) document.body.appendChild( document.createElement("BR") );
}

?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:31.