Sumar columnas de un un campo datetime vertiéndolos a segundo
Publicado por Juan Carlos (1 intervención) el 24/05/2019 13:26:52
SOS !!! Hola amigos, esto me trae por la calle de la amargura y no soy capaz de sacarlo. Ya estoy embotado y no se me ocurre nada, así que por favor ayuda!!!
Tengo dos tablas "entradas_salidas" y "pausas".
De la tabla "entradas_salidas" los campos "Fecha_entrada_hora" y "Fecha_salida_hora" (ambos datetime) los convierto a segundos para a la Fecha_salida_hora restarle la Fecha_entrada_hora. De esta forma me muestra hh:mm:ss y así se las horas, minutos y segundos que ha trabajado.
De la tabla "pausas", igual que la anterior, tengo los campos "Fecha_inicia_pausa_hora" y "Fecha_cancela_pausa_hora" para saber cuantas horas, minutos y segundos ha descansado
Lo que quiero hacer es que me sume todos los segundos de los campos Fecha_entrada_hora" y "Fecha_salida_hora" para luego restarle los segundos de los campos "Fecha_inicia_pausa_hora" y "Fecha_cancela_pausa_hora" de la tabla "pausas" (pueden haber varias pausas en un mismo día) y que en la parte de abajo de la tabla me aparezca también el resultado final tal y como muestro en la imagen que he adjuntado.
Este es mí código completo para que por favor alguien me eche una mano. Gracias mil por adelantado.

Tengo dos tablas "entradas_salidas" y "pausas".
De la tabla "entradas_salidas" los campos "Fecha_entrada_hora" y "Fecha_salida_hora" (ambos datetime) los convierto a segundos para a la Fecha_salida_hora restarle la Fecha_entrada_hora. De esta forma me muestra hh:mm:ss y así se las horas, minutos y segundos que ha trabajado.
De la tabla "pausas", igual que la anterior, tengo los campos "Fecha_inicia_pausa_hora" y "Fecha_cancela_pausa_hora" para saber cuantas horas, minutos y segundos ha descansado
Lo que quiero hacer es que me sume todos los segundos de los campos Fecha_entrada_hora" y "Fecha_salida_hora" para luego restarle los segundos de los campos "Fecha_inicia_pausa_hora" y "Fecha_cancela_pausa_hora" de la tabla "pausas" (pueden haber varias pausas en un mismo día) y que en la parte de abajo de la tabla me aparezca también el resultado final tal y como muestro en la imagen que he adjuntado.
Este es mí código completo para que por favor alguien me eche una mano. Gracias mil por adelantado.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<div class="body table-responsive">
<!-- Inicio tabla-->
<table class="table table-striped table-colored" style="font-size: 11px;">
<thead>
<tr>
<th>Día</th>
<th>Entrada</th>
<th>Salida</th>
<th>Pausas</th>
<th>Horas</th>
</tr>
</thead>
<tbody>
<?php // EXTRAIGO LOS HORARIOS DE ENTRADA Y SALIDA DEL EMPLEADO
$Id_empleado = $row_EMPLEADO_LOGUEADO['Id_empleado'];
mysqli_select_db($conexion,$database_db);
$query_FICHA_ENTRADA_SALIDA = "SELECT Id_entrada_salida, Id_empleado, Fecha_entrada_hora, Fecha_salida_hora FROM entradas_salidas WHERE Id_empleado = '$Id_empleado' ORDER BY Id_entrada_salida DESC";
$FICHA_ENTRADA_SALIDA = mysqli_query($conexion,$query_FICHA_ENTRADA_SALIDA);
$row_FICHA_ENTRADA_SALIDA = mysqli_fetch_assoc($FICHA_ENTRADA_SALIDA);
$totalRows_FICHA_ENTRADA_SALIDA = mysqli_num_rows($FICHA_ENTRADA_SALIDA);
mysqli_free_result($FICHA_ENTRADA_SALIDA);
?>
<?php $FICHA_ENTRADA_SALIDA = mysqli_query($conexion,$query_FICHA_ENTRADA_SALIDA); /////////////// INICIO REPETIR REGION FICHA_ENTRADA_SALIDA ////////////
while($row_FICHA_ENTRADA_SALIDA=mysqli_fetch_array($FICHA_ENTRADA_SALIDA)){ ?>
<?php
$Fecha_entrada_hora = $row_FICHA_ENTRADA_SALIDA['Fecha_entrada_hora'];//Hora de entrada
$Fecha_salida_hora = $row_FICHA_ENTRADA_SALIDA['Fecha_salida_hora'];// Hora de salida
$Segundos_trabajados = strtotime($Fecha_salida_hora) - strtotime($Fecha_entrada_hora);//Las paso a segundos para calculas las horas, minutos y segundos?>
<?php $Segundos_trabajados = $Segundos_trabajados; ///////// A ESTO LE RESTO MAS ABAJO LOS MINUTOS DE PAUSA
$horas_trabajadas = floor($Segundos_trabajados/ 3600);
$minutos_trabajados = floor(($Segundos_trabajados - ($horas_trabajadas * 3600)) / 60);
$Horas_trabajadas = $Segundos_trabajados - ($horas_trabajadas * 3600) - ($minutos_trabajados * 60);?>
<?php //EXTRAIGO LOS HORARIOS DEL INICIO Y DEL FINAL DE LAS PAUSAS QUE HA HECHO
$Id_empleado = $row_EMPLEADO_LOGUEADO['Id_empleado'];
$Id_entrada_salida = $row_FICHA_ENTRADA_SALIDA['Id_entrada_salida'];
mysqli_select_db($conexion,$database_db);
$query_FICHA_INICIO_FINAL_PAUSAS = "SELECT Id_pausa, Id_entrada_salida, Id_empleado, Fecha_inicia_pausa_hora, Fecha_cancela_pausa_hora FROM pausas WHERE Id_empleado = '$Id_empleado' AND Id_entrada_salida = '$Id_entrada_salida' ORDER BY Id_pausa DESC";
$FICHA_INICIO_FINAL_PAUSAS = mysqli_query($conexion,$query_FICHA_INICIO_FINAL_PAUSAS);
$row_FICHA_INICIO_FINAL_PAUSAS = mysqli_fetch_assoc($FICHA_INICIO_FINAL_PAUSAS);
$totalRows_FICHA_INICIO_FINAL_PAUSAS = mysqli_num_rows($FICHA_INICIO_FINAL_PAUSAS);
mysqli_free_result($FICHA_INICIO_FINAL_PAUSAS);
?>
<?php
$Fecha_inicia_pausa_hora = $row_FICHA_INICIO_FINAL_PAUSAS['Fecha_inicia_pausa_hora'];//Hora de entrada
$Fecha_cancela_pausa_hora = $row_FICHA_INICIO_FINAL_PAUSAS['Fecha_cancela_pausa_hora'];// Hora de salida
$Segundos_descansados = strtotime($Fecha_cancela_pausa_hora) - strtotime($Fecha_inicia_pausa_hora);//Las paso a segundos para calculas las horas, minutos y segundos?>
<?php $Segundos_descansados = $Segundos_descansados;
$horas = floor($Segundos_descansados/ 3600);
$minutos = floor(($Segundos_descansados - ($horas * 3600)) / 60);
$Segundos_descansados = $Segundos_descansados - ($horas * 3600) - ($minutos * 60);
$Horas_descansadas = $horas . ':' . $minutos . ":" . $Segundos_descansados;?>
<tr>
<td><?php echo $row_FICHA_ENTRADA_SALIDA['Dia_entrada']?> <?php echo $Día= substr($row_FICHA_ENTRADA_SALIDA['Fecha_entrada_hora'], 8, 2);// Para que muestre solo el día?></td>
<td><?php echo $Hora_entrada = substr($row_FICHA_ENTRADA_SALIDA['Fecha_entrada_hora'], 11, 8);// Para que muestre solo la hora día ?></td><!--Hora entrada-->
<td><?php echo $Hora_salida = substr($row_FICHA_ENTRADA_SALIDA['Fecha_salida_hora'], 11, 8);// Para que muestre solo la hora día ?></td><!--Hora salida-->
<td><?php echo $Horas_descansadas;?></td><!-- tiempo de psusas-->
<td> </td><!-- horas trabajadas en este dia-->
</tr>
<?php
} ///////////////////////////////////////////////////////////////////// FINALIZO REPETIR REGION FICHA_ENTRADA_SALIDA ///////////////////////////////
?>
</tbody>
</table>
<!-- Fin tabla-->
</div>

Valora esta pregunta


0