// Variables
$Salida = '';
$Dia_Anterior = '';
$Fecha_Anterior = '';
$Fecha = '';
$Inicio_Dia = '';
$Cierre_Dia = '';
$Gpo_1 = 0;
$Gpo_2 = 0;
$Gpo_3 = 0;
$Gpo_4 = 0;
$Gpo_Anterior = '';
// Base de datos
$conn = new mysqli($sn, $un, $pw, $db);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT etiqueta, fecha_larga, grupo … ORDER BY fecha_larga ASC";
$result = $conn->query($sql);
$rows=mysqli_fetch_assoc($result);
// Funciones
function dtDif($Minuendo, $Subtracting) {
$minutes = 0;
$M = date_create(date("Y-m-d H:i:s", strtotime($Minuendo)));
$S = date_create(date("Y-m-d H:i:s", strtotime($Subtracting)));
$Diference = $M->diff($S);
$minutes = $Diference->days * 24 * 60;
$minutes += $Diference->h * 60;
$minutes += $Diference->i;
return $minutes;
}
function hm($Minutos) {
$hours = intval($Minutos/60);
$minutes = $Minutos%60;
if(strlen($minutes)<2){
$minutes = '0'.$minutes;
}
return $hours.':'.$minutes;
}
// Inicia proceso
$Salida .= $row['Datos_Encabezado'];
$Salida .= date("Y-m-d", strtotime($rows['fecha_larga'])).'<br/>';
// Bucle
do{
$Fecha = $rows['fecha_larga'];
if($Dia_Anterior != date("Y-m-d", strtotime($Fecha))) {
if($Dia_Anterior != '') {
// Cerrando el día anterior
switch($Gpo_Anterior){
case 4: $Gpo_4 += dtDif($Cierre_Dia, $Fecha_Anterior); break;
case 3: $Gpo_3 += dtDif($Cierre_Dia, $Fecha_Anterior); break;
case 2: $Gpo_2 += dtDif($Cierre_Dia, $Fecha_Anterior); break;
default: $Gpo_1 += dtDif($Cierre_Dia, $Fecha_Anterior);
}
$Salida .= 'Resumen'.'<br/>';
$Salida .= 'Grupo 1 ' . hm($Gpo_1).'<br/>';
$Salida .= 'Grupo 2 ' . hm($Gpo_2).'<br/>';
$Salida .= 'Grupo 3 ' . hm($Gpo_3).'<br/>';
$Salida .= 'Grupo 4 ' . hm($Gpo_4).'<br/><br/>';
$Gpo_1 = 0;
$Gpo_2 = 0;
$Gpo_3 = 0;
$Gpo_4 = 0;
// Iniciando el nuevo día
$Salida .= $row['Datos_Encabezado'];
$Salida .= date("Y-m-d", strtotime($Fecha)).'<br/>';
$Inicio_Dia = substr_replace($Fecha, '00:00:00', 11);
$Salida .= $Gpo_Anterior .' - ' . date("H:i", strtotime($Inicio_Dia)); // 3 Acción queda del día anterior
switch($Gpo_Anterior){
case 4: $Gpo_4 += dtDif($Fecha, $Inicio_Dia); break;
case 3: $Gpo_3 += dtDif($Fecha, $Inicio_Dia); break;
case 2: $Gpo_2 += dtDif($Fecha, $Inicio_Dia); break;
default: $Gpo_1 += dtDif($Fecha, $Inicio_Dia);
}
$Salida .= $rows['grupo'] .' - ' . date("H:i", strtotime($Fecha)); // 1 Primera acción días siguientes
}else{
$Salida .= $rows['grupo'] .' - ' . date("H:i", strtotime($Fecha)); // 0 Primera acción primer día
}
$Dia_Anterior = date("Y-m-d", strtotime($Fecha));
$Cierre_Dia = substr_replace($Fecha, '23:59:59', 11);
}else{
$Salida .= $rows['grupo'] .' - ' . date("H:i", strtotime($Fecha)); // 2 Siguientes acciones del día
switch($Gpo_Anterior){
case 4: $Gpo_4 += dtDif($Fecha, $Fecha_Anterior); break;
case 3: $Gpo_3 += dtDif($Fecha, $Fecha_Anterior); break;
case 2: $Gpo_2 += dtDif($Fecha, $Fecha_Anterior); break;
default: $Gpo_1 += dtDif($Fecha, $Fecha_Anterior);
}
}
$Fecha_Anterior = $Fecha;
$Gpo_Anterior = $rows['grupo'];
} while ($rows = mysqli_fetch_assoc($result));
$Salida .= 'Resumen'.' fin<br/>';
$Salida .= 'Grupo 1 ' . hm($Gpo_1).'<br/>';
$Salida .= 'Grupo 2 ' . hm($Gpo_2).'<br/>';
$Salida .= 'Grupo 3 ' . hm($Gpo_3).'<br/>';
$Salida .= 'Grupo 4 ' . hm($Gpo_4).'<br/><br/>';
$Gpo_1 = 0;
$Gpo_2 = 0;
$Gpo_3 = 0;
$Gpo_4 = 0;
echo '<br/><br/>-- Resultados --<br/>'.$Salida;
// Limpia y cierra
mysqli_free_result($result);
mysqli_close($conn);