De vuelta con las fechas

Hace unso días te pregunte sobre como calcular días hábiles. Cuando me respondiste lo leí, lo entendí y dí por finalizada la pregunta. Pero ahora que lo estudio con más profundidad me surgen algunas dudas. A continuación te transcribo mi pregunta original y tus respuestas. Al final de todo te pregunto mi nueva duda.
=======================================
Problemas con las fechas (8/11/2001 20:11:57)
Hola, me llamo Leonardo. Te comento cual es mi problema. Tengo un servidor Apache con PHP y MySQL corriendo en Windows NT. Necesito armar una aplicación en la cual se guardan en una tabla los siguientes datos:
1) Un número de orden
2) La fecha en que está siendo cargada
3) Otros datos varios
El problema es que también necesito que la aplicación sume en forma automática 45 días HÁBILES a la fecha en la que se cargó. Es decir, necesito que me diga en que fecha se me vence. ¿Cómo hago para calcular esa fecha tomando en cuenta Sábados, Domingos y Feriados?
Desde ya muchas gracias
RE: Problemas con las fechas (12/11/2001 14:28:46)
Estimado amigo leo77,
Acerca de la pregunta que me fórmulas, he de decirte que tendrás que disponer de un calendario, donde pondrías los días "Festivos". Con esto, lo que se haría es ir calculando progresivamente los días, sumando cada día hábil por el que pasamos (de lunes a viernes y teniendo en cuenta los días festivos). Esto sería mediante un bucle donde tendrás dos variables, una con los días hábiles (que tendrá como mucho un valor de 45) y otro con los días reales (sábados, domingos y festivos incluidos). El bucle se ejecutará hasta que la variable de los días hábiles llegue a 45, entonces, a partir de la variable de los días reales, obtendremos la fecha correspondiente.
No sé si esto te lo ha aclarado, si no es así, podríamos hacer el bucle.
Un saludo,
iCesofT
Te entiendo pero... (12/11/2001 14:39:40)
iCesofT:
Gracias por tomarte el tiempo de explicarme. Creo que entiendo lo que me quieres decir, pero como recién empiezo con PHP me cuesta verlo en la práctica.
Lo que entiendo es que en una variable (llamémosle "A") voy a tener cargados los días reales (todos) y de alguna manera (que es lo que todavía no se) voy a poder distinguir si es un día hábil o no; y por el otro lado voy a tener otra variable (llamémosle "B") que cada vez que la primera sea hábil va a sumar un día hasta llegar a los 45.
Si fueses tan amable de guiarme en como armar el bucle; y/o como manejar esa variable "A" te lo agradecería mucho.
Saludos
Leo
RE: Te entiendo pero... (15/11/2001 16:44:8)
Estimado Leo,
Voy a intentar hacer un bucle explicativo para que entiendas cómo se realizaría:
<?php
/* Variables */
$habiles = 0;
$reales = 0;
$fecha = date();
while ($habiles < 45) {
if (es_dia_habil(mktime(0,0,0,date('m'),date('j')+$reales,date('Y')))) {
$habiles++; // incrementamos el valor de la variable habiles
}
$reales++; // incrementamos el valor de la variable reales
}
?>
Con esto, lo más complicado sería crear la función 'es_dia_habil', que calcularía si la fecha que se le pasa como parámetro es un día hábil o no.
Fíjate en la forma de calcular la fecha utilizando la función 'mktime'. El primer parámetro es la hora, el segundo los minutos, 3º segundos, 4º meses, 5º días y 6º el año. Para los días, le sumamos los días $reales. La función se encarga de pasar al siguiente mes si la suma de días excede al mes que le ponemos.
Espero que te haya servido de ayuda.
Un saludo,
iCesofT
========================================
Mi nueva duda es: si por ejemplo para definir los días no hábiles creo una tabla (con nombre "Feriados") en donde enumero uno por uno todos los días que no se trabaja (incluyendo sábados, domingos y fiestas), ¿cómo me quedaría el bucle para calcular esos benditos 45 días hábiles?
Respuesta
1
La solución es sencilla, únicamente tendrás que realizar un select de esa tabla y comprobando que no exista la fecha que buscas en esa fecha.
SELECT * FROM Feriados WHERE Fecha = "$fecha"
Donde $fecha es la fecha que quieres comprobar. Si te da algún resultado, quiere decir que ese día es fiesta, si no, es que es hábil. Con esto, incrementarías el valor de la variable que calcula los días hábiles.
Slds,
iCesofT

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas