Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/07/2010, 16:39
bitshoot
 
Fecha de Ingreso: noviembre-2004
Mensajes: 371
Antigüedad: 19 años, 5 meses
Puntos: 0
Valida solo dias Habiles

Hola a todos,
tengo un problema para el calculo de dias habiles dada una fecha y una cantidad de dias, solo busco calcular los dias de semana (independiente si son feriados) pero no me entrega el valor correcto.


fecha = "03/06/2010"
tomar = 10
separafecha = split(fecha,"/")

'saco cantidad de dias segun mes
Function trae_dias_de_meses(vAno)
Select Case (vAno)
Case "2010":
cant_dias="31,28,31,30,31,30,31,31,30,31,30,31"
Case "2011":
cant_dias="31,28,31,30,31,30,31,31,30,31,30,31"
Case "2012":
cant_dias="31,29,31,30,31,30,31,31,30,31,30,31"
Case "2013":
cant_dias="31,28,31,30,31,30,31,31,30,31,30,31"
Case "2014":
cant_dias="31,28,31,30,31,30,31,31,30,31,30,31"
Case "2015":
cant_dias="31,28,31,30,31,30,31,31,30,31,30,31"
Case "2016":
cant_dias="31,29,31,30,31,30,31,31,30,31,30,31"
Case "2017":
cant_dias="31,28,31,30,31,30,31,31,30,31,30,31"
Case "2018":
cant_dias="31,28,31,30,31,30,31,31,30,31,30,31"
Case "2019":
cant_dias="31,28,31,30,31,30,31,31,30,31,30,31"
Case "2020":
cant_dias="31,29,31,30,31,30,31,31,30,31,30,31"
Case "2021":
cant_dias="31,28,31,30,31,30,31,31,30,31,30,31"
Case else:
cant_dias="30,30,30,30,30,30,30,30,30,30,30,30"
End Select
trae_dias_de_meses = cant_dias
End Function

'trae cantidad de dias de los meses del año correspondiente.
vAnoMes = trae_dias_de_meses(separafecha(2))
vAnoMesArray = split(vAnoMes,",") 'guardo en arreglo cant. de dias de cada mes.
cant_dias_del_mes = vAnoMesArray(separafecha(1)-1) ' consulto cantidad de dias del mes que se pide la vacacion

'el primer ciclo calcula dias de fds desde el dia de inicio hasta los dias a tomar.
dia_partida = separafecha(0) 'asigno dia de inicio
mes_partida = separafecha(1)
anio_partida = separafecha(2)

cuenta_d = 0 ' contador para los dias, a fin de mes vuelve a 0
entra = 1 ' controla while
tomar = (tomar + cint(dia_partida)) - 1
festivos = 0

do while entra = 1
for n = dia_partida to (tomar)
muestrafecha = 1

'a la fecha inicial le suma dias para ver si son fds
suma_dia = dia_partida + cuenta_d
'response.Write(suma_dia) & "=" & dia_partida & "+" & cuenta_d &"<br>"

if (cint(cant_dias_del_mes) >= cint(suma_dia)) then
' aqui controlo en cambio de mes
mes_fecha = mes_partida
else
mes_fecha = mes_partida + 1
mes_partida = mes_fecha 'cambia mes partida cumplidos fdm
suma_dia = 1
cuenta_d = 0
end if

vfecha = suma_dia & "/" & mes_fecha & "/" & anio_partida 'response.Write(vfecha) & "<br>"
if (WeekDayName(WeekDay(vfecha)) = "sábado") or (WeekDayName(WeekDay(vfecha)) = "domingo") then
festivos = festivos + 1
muestrafecha = 0
end if

cuenta_d = cuenta_d + 1 'suma dias
if muestrafecha = 1 then
response.Write(vfecha) & "<br>"
end if
next
'response.Write(suma_dia & "=suma dias " & festivos & "=festivos -------<br>")

if festivos > 0 then
'cuenta_d = cuenta_d-1
dia_partida = suma_dia + 1
tomar = suma_dia + festivos
suma_dia = suma_dia - dia_partida
festivos = 0
'n = 0

response.Write(dia_partida & "&nbsp;nuevo dia partida---------------<br>")
response.Write(tomar & "&nbsp;nuevo tomar---------------<br><br>")
else
entra = 0
end if
loop

'dia_final = dia_partida + tomar + vfds ' sumo: dia de partida de fecha, los dias a tomar y los fines de semana
if suma_dia < 10 then
dia = "0" & suma_dia
else
dia = suma_dia
end if

if (len(mes_fecha) < 2) then
mes = "0" & mes_fecha
else
mes = mes_fecha
end if

'armo la fecha final
vfecha_final = dia & "/" & mes & "/" & anio_partida
response.Write("<br>" & vfecha_final) & "---------final---------<br>"

al momento de terminar el 1er while, pierdo el puntero y no logro recuperarlo, es posible cambiar el while... esto podria hacerlo haciendo que la variable de for no se ingremente cuando la fecha sea sabado o domingo...

saludos y se agradese desde ya cualquier ayuda.

Última edición por bitshoot; 14/07/2010 a las 07:42 Razón: mejor lectura