Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/08/2014, 10:36
MatiasFiermarin
 
Fecha de Ingreso: septiembre-2011
Mensajes: 35
Antigüedad: 13 años, 3 meses
Puntos: 0
Diferencia de Tiempo entre fechas

Buenas, hace un tiempo me dieron una solución para calcular la diferencia de tiempo entre 2 fechas de formato (dd-mm-yyyy hh-mm-ss) que me sirvió pero tengo un problema.

Primero voy a describir las tablas.

Tabla "Excel" (Tabla donde se cargan los datos del reloj)
- Id
- cedula
- nombre
- hora (del formato dicho anteriormente)
- Forma_Ingreso (Huella Digital o Manual)
- entrada ( I o O Int - Out en otras palabras)
- fecha

De esta table cree 2 vistas para separar las entradas y las salidas

v_entrada
v_salida

Luego de esto cree otra vista que seria un intersect de las dos para sacar los registros que tienen salida y entrada y no solo entrada o solo salida.

Ejemplo si hay un registro de entrada del día 05-08-2014 pero no hay salida para este día no se toma en cuenta.

Aquí surge mi primer problema ya que un empleado puede entrar a las 18:00:00 del día 05-08-2014 y salir a las 00:00:00 del día 06-08-2014.

luego para calcular la diferencia de tiempo entre entrada y salida hago lo siguiente

Código PHP:
Ver original
  1. function RegistrarHorarios(){
  2.     $datos=Seleccionar("v_todo","*","fecha BETWEEN '".$_POST['fecha1']."' AND '".$_POST['fecha2']."' GROUP BY cedula");
  3.     $cedula;
  4.     $id;
  5.     $horastrab;
  6.     $texto = "";
  7.     while ($row=mysql_fetch_array($datos)) {
  8.         $cedula = $row['cedula'];
  9.         $datos2=Seleccionar("empleados","*","Cedula=".$cedula."");
  10.         while($row2=mysql_fetch_array($datos2)){
  11.             $id= $row2['IdEmpleado'];
  12.         }
  13.         if($id==''){
  14.         }else{ 
  15.             $datos3=Seleccionar("empleadosector a1, sector a2","*","a1.IdEmpleado=".$id." AND a1.IdSector=a2.IdSector");
  16.             if(mysql_num_rows($datos3)!=0){
  17.                 while($row2=mysql_fetch_array($datos3)){
  18.                     $horastrab = $row2['Horas'];
  19.                     break;
  20.                 }
  21.                 $datos5=Seleccionar("v_todo","fecha, SEC_TO_TIME(SUM(TIME_TO_SEC(TotalHoras))) AS Total","cedula=".$cedula." AND fecha BETWEEN '".$_POST['fecha1']."' AND '".$_POST['fecha2']."' GROUP BY fecha");
  22.                 while($row3=mysql_fetch_array($datos5)){
  23.                     $horastrabajadas = $row3['Total'];
  24.                     //return "Cedula ". $cedula ." id ". $id ."Horas de trab ".$horastrab." horas trabajadas ".$horastrabajadas;
  25.                     $diferenciatiempo = Seleccionar("","TIMEDIFF('".$horastrabajadas."','".$horastrab."') AS Horas","");
  26.                     while($row2=mysql_fetch_array($diferenciatiempo)){
  27.                         $horasdetrab2 = $row2['Horas'];
  28.                         $horasccte = Seleccionar("ccte","DiferenciaTiempo","Id_Empleado=".$id);
  29.                         while($ccte=mysql_fetch_array($horasccte)){
  30.                             $horaccte = $ccte['DiferenciaTiempo'];
  31.                             //$texto = $texto." Cedula ". $cedula ." id ". $id ." Horas de trab ".$horastrab." horas trabajadas ".$horastrabajadas."DIFERENCIA ".$horasdetrab2." CCTE ".$horaccte;
  32.                             $actualizoccte=Modificar("ccte","DiferenciaTiempo=ADDTIME('".$horaccte."','".$horasdetrab2."')","Id_Empleado=".$id);
  33.                             break 3;
  34.                         }
  35.                     }
  36.                 }
  37.             }else{
  38.                 $datos4=Seleccionar("empleadosector_rot a1, sector_rot a2","*","a1.IdEmpleado=".$id." AND a1.IdSector_Rot=a2.IdSector_Rot");
  39.                 while($row2=mysql_fetch_array($datos4)){
  40.                     $horastrab = $row2['Horas'];
  41.                     break;
  42.                 }
  43.                 $datos5=Seleccionar("v_todo","fecha, SEC_TO_TIME(SUM(TIME_TO_SEC(TotalHoras))) AS Total","cedula=".$cedula." AND fecha BETWEEN '".$_POST['fecha1']."' AND '".$_POST['fecha2']."' GROUP BY fecha");
  44.                 while($row3=mysql_fetch_array($datos5)){
  45.                     $horastrabajadas = $row3['Total'];
  46.                     //return "Cedula ". $cedula ." id ". $id ."Horas de trab ".$horasdetrab." horas trabajadas ".$horastrabajadas;
  47.                     $diferenciatiempo = Seleccionar("","TIMEDIFF('".$horastrabajadas."','".$horastrab."') AS Horas","");
  48.                     while($row2=mysql_fetch_array($diferenciatiempo)){
  49.                         $horasdetrab2 = $row2['Horas'];
  50.                         $horasccte = Seleccionar("ccte","DiferenciaTiempo","Id_Empleado=".$id);
  51.                         while($ccte=mysql_fetch_array($horasccte)){
  52.                             $horaccte = $ccte['DiferenciaTiempo'];
  53.                             //$texto = $texto." Cedula ". $cedula ." id ". $id ." Horas de trab ".$horastrab." horas trabajadas ".$horastrabajadas."DIFERENCIA ".$horasdetrab2." CCTE ".$horaccte;
  54.                             $actualizoccte=Modificar("ccte","DiferenciaTiempo=ADDTIME('".$horaccte."','".$horasdetrab2."')","Id_Empleado=".$id);
  55.                             break 3;
  56.                         }
  57.                     }
  58.                 }
  59.             }
  60.         }
  61.     }
  62.     return "Horas Registradas";
  63. }

El tema es que me calcula las horas pero si tengo 4 registros 2 I y 2 O siendo de el siguiente modo.

1) I
2) O
3) I
4) O

Me calcula el tiempo de 1 con el 2 y del 3 con el 4 (esto esta bien) y luego del 1 con el 4 y el 3 con el 2 en otras palabras todas las combinaciones, alguien me puede ayudar con estos dos problemas?

Gracias.