Foros del Web » Programando para Internet » PHP »

Calcular horas semanales

Estas en el tema de Calcular horas semanales en el foro de PHP en Foros del Web. Me equivoque en el titulo. Seria calcular horas mensuales Muy buenas a todos. Estoy haciendo una aplicación y me piden que cuente las horas mensuales ...
  #1 (permalink)  
Antiguo 29/11/2007, 14:11
 
Fecha de Ingreso: noviembre-2002
Mensajes: 130
Antigüedad: 22 años
Puntos: 0
Calcular horas semanales

Me equivoque en el titulo. Seria calcular horas mensuales

Muy buenas a todos.
Estoy haciendo una aplicación y me piden que cuente las horas mensuales (excepto sabados y domingos) para tener un número final de horas trabajadas en cada més.
Por ejemplo, este més de Noviembre de 2007 tiene 22 días laborables. Si lo multiplicaramos por 8 horas diarias nos saldría 176horas.
Esto debería ser dinámico ya que cada més tiene un número de horas diferente (Diciembre por ejemplo tiene 21 días)

hasta ahora he encontrado cómo calcular el més, o como calcular los dias de la semana. Pero no he encontrado nada que se asemeje a lo que me piden.

Encontré esta función, pero lo que me hace es calcular los días de cada més, pero realmente no es lo que necesito.

Si alguien tiene idea o me pueden echar un cable se lo agradecería.

Código PHP:
function UltimoDia($anho,$mes){ 
   if (((
fmod($anho,4)==0) and (fmod($anho,100)!=0)) or (fmod($anho,400)==0)) { 
       
$dias_febrero 29
   } else { 
       
$dias_febrero 28
   } 
   switch(
$mes) { 
       case 
01: return 31; break; 
       case 
02: return $dias_febrero; break; 
       case 
03: return 31; break; 
       case 
04: return 30; break; 
       case 
05: return 31; break; 
       case 
06: return 30; break; 
       case 
07: return 31; break; 
       case 
08: return 31; break; 
       case 
09: return 30; break; 
       case 
10: return 31; break; 
       case 
11: return 30; break; 
       case 
12: return 31; break; 
   } 
}
 print 
UltimoDia(2007,11); 

Última edición por Faser; 29/11/2007 a las 14:15 Razón: modificar título del mensaje
  #2 (permalink)  
Antiguo 29/11/2007, 14:19
 
Fecha de Ingreso: octubre-2007
Ubicación: VEVLN
Mensajes: 223
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Calcular horas semanales

creo que tendrias que hacer unos vectores o guardar en una tabla (si usas DB) los dias festivos de cada mes, y luego haces : $Mes-($festivos + $Weekend) y el resultado son tus dias laborales.

aqui te dejo algo parecido

http://jbengoechea.com/laborables.htm
  #3 (permalink)  
Antiguo 29/11/2007, 14:28
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años
Puntos: 17
Re: Calcular horas semanales

Umm, pues no sé si habrá algún modo más directo de sacar los días laborables, pero así a bote pronto yo haría un bucle con todos los días del mes y comprobaría que no sea fin de semana.


Código PHP:

$Dias_laborables
=0;
$mes 1// o el que sea
$anio 2007// o el que sea
$Dias_totales date("t"mktime(0,0,0,$mes,1,$anio)); // Los días que tiene ese mes

for ($i=1$i <= $Dias_totales$i++) {

    if (
date("N"mktime(0,0,0,$mes,$i,$anio)) < 6)  // No es fin de semana!
              
$Dias_laborables++;

No lo he probado, pero sería algo parecido...

Claro, que si también te interesa no sumar otro tipo de días festivos la cosa cambiaría.
  #4 (permalink)  
Antiguo 30/11/2007, 01:35
 
Fecha de Ingreso: noviembre-2002
Mensajes: 130
Antigüedad: 22 años
Puntos: 0
Re: Calcular horas semanales

Gracias por la respuesta.

he copiado el código y no acaba de funcionar. Me da un resultado de 30 dias (para noviembre, 31 diciembre, etc...), y no resta los dias festivos como sabado y domingo:
Le daré un par de vueltas más, aunque si a alguien se le acurre algo, por favor me lo comantan

Código PHP:
$Dias_laborables=0;
$mes $_GET['monthID']; // o el que sea
$anio $_GET['yearID']; // o el que sea
$Dias_totales date("t"mktime(0,0,0,$mes,1,$anio)); // Los días que tiene ese mes

for ($i=1$i <= $Dias_totales$i++) {
  if (
date("N"mktime(0,0,0,$mes,$i,$anio)) < 6)  // No es fin de semana!
  
$Dias_laborables++;
}
print 
"Dias laborables ".$Dias_totales
Es posible que la funcion date("N",.....), sea para PHP 5.0..
  #5 (permalink)  
Antiguo 30/11/2007, 03:37
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años
Puntos: 17
Re: Calcular horas semanales

Cierto, es sólo para PHP 5. Sino sería "w", pero está con anotación inglesa, es decir, la semana empieza en Domingo, por lo que sería:

0 Domingo
1 Lunes
...
6 Sábado

La comprobación sería algo diferente:


Código PHP:

if ((date("w"mktime(0,0,0,$mes,$i,$anio)) < 6) && (date("w"mktime(0,0,0,$mes,$i,$anio)) > 0)) 

Prueba y nos cuentas qué tal.

Por cierto, para el manejo de fechas viene bien http://es.php.net/date y http://es.php.net/manual/es/function.mktime.php
  #6 (permalink)  
Antiguo 30/11/2007, 04:12
 
Fecha de Ingreso: noviembre-2002
Mensajes: 130
Antigüedad: 22 años
Puntos: 0
Re: Calcular horas semanales

Muchísimas gracias Keysher.

El código funciona a la perfección

La verdad es que siempre he tenido serios problemas con el tema de las fechas. Es quizas de los temas que más me cuestan.
Ya le he echado un vistazo a los links que me mandaste, pero ya te digo, es un tema duro de pelar.

Gracias de todas formas.

Les dejo aquí el código por si alguien lo necesita.
Saludos


Código PHP:
$Dias_laborables=0;
$mes 11// o el que sea
$anio 2007// o el que sea
$Dias_totales date("t"mktime(0,0,0,$mes,1,$anio)); // Los días que tiene ese mes

for ($i=1$i <= $Dias_totales$i++) {

    if ((
date("w"mktime(0,0,0,$mes,$i,$anio)) < 6) && (date("w"mktime(0,0,0,$mes,$i,$anio)) > 0)) 
    
$Dias_laborables++;
}
print 
"Dias laborables ".$Dias_laborables
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 14:10.