Pregunta:
Fecha: 08-02-2018 00:30:46
(En Español)
el db lo tengo en http://sqlfiddle.com/#!9/d484ec/2
y el código php,(que funciona pero mal...) es:
La pregunta es: qué hago mal en la cuenta de acumular los segundos ? Las diferencias las hice dos veces porque ya no sabía dónde era correcto hacerla, pese a la redundancia obvia...
Les estaría agradecida por su ayuda
atte. Ulloa
Votos: 1 - Respuestas: 2 - Vistas: 13 Compartir en: Google Facebook Twitter LinkedIn Link
Tabla de tiempos acumulados en segundos con PHP: no me funciona el código[No resuelta]
la tabla debe llevar una columna con los valores acumulados y debe ser calculada con php y mysql, no sólo mysql.el db lo tengo en http://sqlfiddle.com/#!9/d484ec/2
CREATE TABLE `tbl_empleados` ( `id` int(11) NOT NULL, `per_nr` varchar(11) NOT NULL, `name` varchar(50) NOT NULL, `sollzeit` time NOT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `begintime` datetime NOT NULL, `endtime` datetime NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Daten für Tabelle `tbl_empleados` -- INSERT INTO `tbl_empleados` (`id`, `per_nr`, `name`, `sollzeit`, `created`, `begintime`, `endtime`) VALUES (1, '120', 'Perez', '07:45:00', '2018-02-07 10:10:40', '2018-02-07 08:00:00', '2018-02-07 10:00:00'), (2, '120', 'Perez', '07:45:00', '2018-02-07 10:10:40', '2018-02-07 11:00:00', '2018-02-07 13:00:00'), (3, '120', 'Perez', '07:45:00', '2018-02-07 10:10:40', '2018-02-07 13:30:00', '2018-02-07 17:00:00'), (4, '121', 'Gonzalez', '07:45:00', '2018-02-07 10:10:40', '2018-02-07 08:00:00', '2018-02-07 17:00:00'), (5, '122', 'Martinez', '07:45:00', '2018-02-07 10:10:40', '2018-02-07 08:00:00', '2018-02-07 17:00:00'), (6, '123', 'Garrido', '07:45:00', '2018-02-07 10:10:40', '2018-02-07 08:00:00', '2018-02-07 17:00:00'), (7, '124', 'Villaruel', '07:45:00', '2018-02-07 10:11:42', '2018-02-07 09:00:00', '2018-02-07 17:00:00');
SELECT * ,(UNIX_TIMESTAMP(endtime)-UNIX_TIMESTAMP(begintime)) as diferencia FROM tbl_empleados WHERE per_nr='120' and begintime >='2018-02-07 00:00:00' and endtime <='2018-02-20 23:59:59' ORDER BY id asc, begintime asc
y el código php,(que funciona pero mal...) es:
<html>
<body>
<div>
<?php
$saldo=0; $saldo_cum=0;
$pn='120';//personal nr
$start_date='2018-02-07';
$end_date='2018-02-20';
$conn = mysqli_connect("localhost", "root", " ", "testing");
$sql = "SELECT * ,(UNIX_TIMESTAMP(endtime)-UNIX_TIMESTAMP(begintime)) as cum ".
"FROM tbl_empleados ".
"WHERE per_nr=$pn and ".
"begintime >='".$start_date." 00:00:00' and endtime <='".$end_date." 23:59:59' ".
"ORDER BY id asc, begintime asc";
$por_fecha = $conn->query($sql);
echo "<table border=\"1\"> <tr>";
echo "<th> i</th>";
echo "<th> id</th>";
echo "<th> per nr</th>";
echo "<th>name </th>";
echo "<th>ii </th>";
echo "<th>begintime</th>";
echo "<th>endtime</th>";
echo "<th>saldo netto </th>";
echo "<th>saldo cum </th>";
echo "</tr>";
$i=0;
while($row = $por_fecha->fetch_assoc()){
echo "<tr>";
/* datum aufteilen */
$string=utf8_encode ($row['begintime']);
$teile = explode(' ',$string);
$fecha=$teile[0];//Jahr
$hora=$teile[1];//Uhrzeit
$fx= $row['begintime'];
echo " <td>" .$i . "</td>";
echo " <td>" .$row['id'] . "</td>";
echo " <td>" .$row['per_nr'] . "</td>";
echo " <td>" .$row['name'] . "</td>";
//busco las horas por dia
$sql2 = "SELECT *,(UNIX_TIMESTAMP(endtime)-UNIX_TIMESTAMP(begintime)) as kum FROM tbl_empleados
WHERE begintime='$fx' AND per_nr='$pn' ";
$horas = $conn->query($sql2);
if( $horas->num_rows > 0 ){
$saldo=0; $saldo_cum=0;
$ii=0;
while($v = $horas->fetch_assoc()){
$ii=$ii+1;
echo " <td>" .$ii . "</td>";
echo " <td>" .$v['begintime'] . "</td>";
echo " <td>" .$v['endtime'] . "</td>";
echo " <td>" .$v['kum'] . "</td>";
$saldo = $v['kum'];
$saldo_cum = $saldo_cum + $saldo;
}
$saldo = $row['cum'];
$saldo_cum = $saldo_cum + $saldo;
echo " <td>" .$saldo_cum . "</td>";
echo "</tr>";
}
$i=$i+1;
}
?>
<tr>
<td colspan="7"> Total </td>
<td> <?php echo $saldo; ?></td>
<td> <?php echo $saldo_cum; ?></td>
</tr>
</table>
</div>
<body>
</html>
La pregunta es: qué hago mal en la cuenta de acumular los segundos ? Las diferencias las hice dos veces porque ya no sabía dónde era correcto hacerla, pese a la redundancia obvia...
Les estaría agradecida por su ayuda
atte. Ulloa
Votos: 1 - Respuestas: 2 - Vistas: 13 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 08-02-2018 07:08:42 No entedim muy bien lo que requieres, pero si lo que deseas es saber la diferencia en segundos entre la hora de inicio y la hora final, asi como el total de segundos de dicho reriodo, podrias intentar algo asi:
SELECT DATE_FORMAT(begintime, '%H:%I:%S' ) as inicio, DATE_FORMAT(endtime, '%H:%I:%S' ) as final, (TIME_TO_SEC(DATE_FORMAT(begintime, '%H:%I:%S' )) + TIME_TO_SEC(DATE_FORMAT(endtime, '%H:%I:%S' ))) as totalSegundos, TIME_TO_SEC(TIMEDIFF(DATE_FORMAT(endtime, '%H:%I:%S' ), DATE_FORMAT(begintime, '%H:%I:%S' )) ) as diferenciaSegundos FROM tbl_empleados
Tienes una muestra con tus mismos registros aqui:
MUESTRA Votos: 2 - Link respuesta -
Fecha: 08-02-2018 09:06:12 Hola Carlos, miles de gracias, eso exactamente quería tener. Lo único que tuve que cambiar era en el formato '%H:%I:%S' por '%H:%i:%s' para que no me agregara minutos demás...
Ahora lo único que me falta es saber si es posible diferenciar las líneas por fecha, es decir, esto para poder hacer cuentas intermedias y quitarles por día una sola vez los 30 minutos de pausa. No sé si se podra hacer algún if en el mysql mismo. Pongo la tabla donde se ve el asunto al que me refiero. Muchas gracias de antemano

Votos: 1 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
