@ 2017-06-16T18:28:22Z <?php
function tipoHorario($hora, $inicioMatutino, $inicioVespertino, $finMatutino, $finVespertino){
$horaUTC = strtotime($hora);
if($horaUTC >= strtotime($inicioMatutino) && $horaUTC < strtotime($finMatutino))
return "Matutino";
else
if($horaUTC >= strtotime($finMatutino) && $horaUTC < strtotime($inicioVespertino) )
return "Descanso matutino";
else
if($horaUTC >= strtotime($inicioVespertino) && $horaUTC < strtotime($finVespertino))
return "Vespertino";
else
return "Descanso vespertino";
}
function tipoCaso($hora, $inicioMatutino, $inicioVespertino, $finMatutino, $finVespertino){
$previoFinMatutino = date("H:i", strtotime($finMatutino . " -30 minutes"));
$previoFinVespertino = date("H:i", strtotime($finVespertino . " -30 minutes"));
//Si cayó el caso entre 14:30 y 15:00 o en Descanso matutino
if( strtotime($hora) >= strtotime($previoFinMatutino) && strtotime($hora) < strtotime($finMatutino)
|| tipoHorario($hora, $inicioMatutino, $inicioVespertino, $finMatutino, $finVespertino) == "Descanso matutino"
){
$cadena = "Caso especial matutino";
//si cayó en un descanso matutino, es decir después las 15:00 y antes de las 16:30 se le sumará directo 30
if(tipoHorario($hora, $inicioMatutino, $inicioVespertino, $finMatutino, $finVespertino) == "Descanso matutino" )
$cadena = $cadena . " en descanso";
//los minutos sobrantes se suman despues de 16:30
return $cadena;
}
//Si cayó el caso entre las 18:00 y 18:30 o en descanso vespertino
if( strtotime($hora) >= strtotime($previoFinVespertino) && strtotime($hora) < strtotime($finVespertino)
|| tipoHorario($hora, $inicioMatutino, $inicioVespertino, $finMatutino, $finVespertino) == "Descanso vespertino"
){
$cadena = "Caso especial vespertino";
if(tipoHorario($hora, $inicioMatutino, $inicioVespertino, $finMatutino, $finVespertino) == "Descanso vespertino")
$cadena = $cadena . " en descanso";
//Los minutos sobrantes se suman después de 09:00
return $cadena;
}
//Si el caso entró dentro del rango matutino sin el caso especial, es normal matutino
if( tipoHorario($hora, $inicioMatutino, $inicioVespertino, $finMatutino, $finVespertino) == "Matutino" )
return "Caso normal matutino";
//Si el caso entró dentro del rango vespertino sin el caso especial, es normal vespertino
if( tipoHorario($hora, $inicioMatutino, $inicioVespertino, $finMatutino, $finVespertino) == "Vespertino" )
return "Caso normal vespertino";
}
function restaMinutos($horaMayor, $horaMenor){
$resultadoResta = strtotime($horaMayor) - strtotime($horaMenor);
echo "Resultado resta $horaMayor - $horaMenor= ". date("i", $resultadoResta)."\n";
return date("i", $resultadoResta);
}
function minutosSobrantes($offset, $horaMayor, $horaMenor){
$horaMayor = date('H:i', strtotime($horaMayor ) );
$minMenor = restaMinutos($horaMayor, $horaMenor) ;
//$resultadoResta = $offset - $minMenor;
$minMayor = "00:".$offset."";
$resultadoResta = date("i", strtotime($minMayor. " -".$minMenor." minutes") );
echo "Minutos sobrantes: ". $resultadoResta."\n";
return $resultadoResta;
}
function obtenerHoraEstimada($hora, $tipoCaso, $inicioMatutino, $inicioVespertino, $finMatutino, $finVespertino, $offset){
$horaEstimada = "";
//Si el tipo de caso es normal X
//Solamente se le sumara el offset entero a la hora
if( $tipoCaso == "Caso normal matutino" || $tipoCaso == "Caso normal vespertino" ){
echo "Se le sumará el offset entero ".$offset." a ".$hora."\n";
//echo "Hora estimada: " . date('H:i', strtotime($hora . " +30 minutes") ) . "\n";
$horaEstimada = date('H:i', strtotime($hora . " +30 minutes") );
}
//sino, hay que ver que tipo de caso especial es
else{
//Si es caso especial matutino, hay que calcular los minutos sobrantes y añadirlos a la hora
//de inicio vespertina
if( $tipoCaso == "Caso especial matutino" ){
echo "Se le sumará el sobrante de ".$offset." a la horaInicioVespertino: " . $inicioVespertino . "\n";
$sobrante= minutosSobrantes($offset, $finMatutino, $hora);
//echo "Hora estimada: " . date("H:i", strtotime($inicioVespertino." +".$sobrante." minutes") );
$horaEstimada = date("H:i", strtotime($inicioVespertino." +".$sobrante." minutes") );
}
//Si es caso especial matutino en descanso, hay que calcular los minutos sobrantes y añadirlos a la hora
//de inicioVespertina
else if( $tipoCaso == "Caso especial matutino en descanso" ){
echo "Se le sumará el offset entero ".$offset." a la horaInicioVespertino: " . $inicioVespertino . "\n";
//echo "Hora estimada: " . date('H:i', strtotime($inicioVespertino . " +30 minutes") ) . "\n";
$horaEstimada = date('H:i', strtotime($inicioVespertino . " +30 minutes") );
}
//Si es caso especial vespertino, hay que calcular los minutos sobrantes y añadirlos a la hora
//de inicioMatutina
else if ($tipoCaso == "Caso especial vespertino" ){
echo "Se le sumará el sobrante de ".$offset." a la horaInicioMatutino: " . $inicioMatutino . "\n";
$sobrante = minutosSobrantes($offset, $finVespertino, $hora);
//echo "Hora estimada: " . date("H:i", strtotime($inicioMatutino." +".$sobrante." minutes") );
$horaEstimada = date("H:i", strtotime($inicioMatutino." +".$sobrante." minutes") );
}
//Si es caso especial vespertina en descanso, hay que calcular los minutos sobrantes y añadirlos a la hora
//de inicioMatutina
else if( $tipoCaso == "Caso especial vespertino en descanso" ){
echo "Se le sumará el offset entero ".$offset." a la horaInicioMatutino: " . $inicioMatutino . "\n";
//echo "Hora estimada: " . date('H:i', strtotime($inicioMatutino . " +30 minutes") ) . "\n";
$horaEstimada = date('H:i', strtotime($inicioMatutino . " +30 minutes") ) ;
}
}
return $horaEstimada;
}
function obtenerFechaEstimada($fecha, $noDia){
$offsetFecha = "";
//Si el día de la fecha cayó entre lunes y jueves (inclusive domingo), aumentar 1 día
if( ($noDia>= 1 && $noDia <= 4) || $noDia==7)
$offsetFecha = " +1 days";
//Si cayó el viernes, aumentar 3 días
else if( $noDia == 5 )
$offsetFecha = " +3 days";
//Si hubo el caso en el que cayó el sábado, aumentar 2 días
else if( $noDia == 6 )
$offsetFecha = " +2 days";
return date("Y-m-d", strtotime($fecha . $offsetFecha) );
}
function checktime($fechaHora, $minutosTolerancia){
$fecha = date("Y-m-d", strtotime($fechaHora));
$horaMinuto = date("H:i", strtotime($fechaHora));
$noDia = date("N", strtotime($fechaHora));
$horaInicioMatutino = "09:00";
$horaFinMatutino = "15:00";
$horaInicioVespertino = "16:30";
$horaFinVespertino = "18:30";
echo "fecha: " . $fecha . "\nhoraMinuto: " . $horaMinuto . "\nnoDia: " . $noDia . "\n\n";
echo "tipoHorario: " . tipoHorario($horaMinuto, $horaInicioMatutino, $horaInicioVespertino,
$horaFinMatutino, $horaFinVespertino) . "\n\n";
echo "tipoCaso: " . tipoCaso($horaMinuto, $horaInicioMatutino, $horaInicioVespertino,
$horaFinMatutino, $horaFinVespertino) . "\n\n";
$tipoCaso = tipoCaso($horaMinuto, $horaInicioMatutino, $horaInicioVespertino,$horaFinMatutino, $horaFinVespertino);
$horaEstimada = obtenerHoraEstimada($horaMinuto, $tipoCaso, $horaInicioMatutino, $horaInicioVespertino, $horaFinMatutino, $horaFinVespertino, $minutosTolerancia );
$fechaEstimada = $fecha;
if($tipoCaso == "Caso especial vespertino" || $tipoCaso == "Caso especial vespertino en descanso"){
$tempFechaEstimada = obtenerFechaEstimada($fecha, $noDia);
//if lo del feriado
$fechaEstimada = $tempFechaEstimada;
}
echo "Fecha estimada obtenida: " . $fechaEstimada."\n\n";
echo "Hora estimada obtenida: " . $horaEstimada."\n\n";
}
checktime("2017-06-15 08:00:00",30);
echo "***************************\n\n";
checktime("2017-06-15 09:00:00",30);
echo "***************************\n\n";
checktime("2017-06-15 12:50:00",30);
echo "***************************\n\n";
checktime("2017-06-15 14:29:00",30);
echo "***************************\n\n";
checktime("2017-06-15 14:30:00",30);
echo "***************************\n\n";
checktime("2017-06-15 14:35:00",30);
echo "***************************\n\n";
checktime("2017-06-15 14:55:00",30);
echo "***************************\n\n";
checktime("2017-06-15 16:29:00",30);
echo "***************************\n\n";
checktime("2017-06-15 16:30:00",30);
echo "***************************\n\n";
checktime("2017-06-15 17:59:00",30);
echo "***************************\n\n";
checktime("2017-06-15 18:00:00",30);
echo "***************************\n\n";
checktime("2017-06-15 18:29:00",30);
echo "***************************\n\n";
checktime("2017-06-15 18:30:00",30);
echo "***************************\n\n";
checktime("2017-06-15 19:29:00",30);
echo "***************************\n\n";
?>
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).
Version System time (s) User time (s) Memory (MiB) 8.3.4 0.007 0.010 18.96 8.3.3 0.011 0.007 18.93 8.3.2 0.006 0.003 21.85 8.3.1 0.006 0.003 21.90 8.3.0 0.003 0.006 19.80 8.2.17 0.010 0.007 22.96 8.2.16 0.010 0.013 20.65 8.2.15 0.006 0.003 24.18 8.2.14 0.004 0.004 24.66 8.2.13 0.009 0.000 20.63 8.2.12 0.009 0.000 26.35 8.2.11 0.009 0.003 21.19 8.2.10 0.008 0.005 18.28 8.2.9 0.003 0.006 18.00 8.2.8 0.004 0.007 18.00 8.2.7 0.000 0.009 18.29 8.2.6 0.003 0.007 18.47 8.2.5 0.006 0.003 18.10 8.2.4 0.003 0.006 22.27 8.2.3 0.004 0.004 19.50 8.2.2 0.003 0.006 18.39 8.2.1 0.003 0.006 18.36 8.2.0 0.006 0.003 18.34 8.1.27 0.004 0.008 20.79 8.1.26 0.004 0.004 26.35 8.1.25 0.004 0.004 28.09 8.1.24 0.005 0.005 22.32 8.1.23 0.000 0.013 22.66 8.1.22 0.000 0.010 17.90 8.1.21 0.000 0.011 18.77 8.1.20 0.011 0.000 17.73 8.1.19 0.007 0.004 17.60 8.1.18 0.000 0.010 18.10 8.1.17 0.006 0.003 19.07 8.1.16 0.006 0.003 19.02 8.1.15 0.000 0.008 20.34 8.1.14 0.003 0.006 19.72 8.1.13 0.003 0.007 19.09 8.1.12 0.010 0.000 17.71 8.1.11 0.003 0.007 17.75 8.1.10 0.006 0.003 17.68 8.1.9 0.000 0.009 17.80 8.1.8 0.006 0.003 17.76 8.1.7 0.004 0.004 17.71 8.1.6 0.007 0.003 17.76 8.1.5 0.003 0.006 17.71 8.1.4 0.010 0.000 17.81 8.1.3 0.006 0.003 17.83 8.1.2 0.006 0.003 17.77 8.1.1 0.003 0.006 17.82 8.1.0 0.004 0.004 17.80 8.0.30 0.003 0.006 20.21 8.0.29 0.000 0.009 17.00 8.0.28 0.003 0.005 18.67 8.0.27 0.003 0.006 17.48 8.0.26 0.004 0.004 19.06 8.0.25 0.005 0.003 17.22 8.0.24 0.005 0.005 17.34 8.0.23 0.006 0.003 17.27 8.0.22 0.000 0.008 17.18 8.0.21 0.000 0.009 17.25 8.0.20 0.000 0.008 17.32 8.0.19 0.008 0.005 17.27 8.0.18 0.000 0.009 17.25 8.0.17 0.004 0.004 17.18 8.0.16 0.008 0.000 17.35 8.0.15 0.006 0.003 17.08 8.0.14 0.000 0.009 17.04 8.0.13 0.007 0.000 13.65 8.0.12 0.004 0.007 17.11 8.0.11 0.009 0.000 17.09 8.0.10 0.003 0.006 17.09 8.0.9 0.006 0.003 17.14 8.0.8 0.012 0.013 17.19 8.0.7 0.006 0.006 17.23 8.0.6 0.000 0.010 17.22 8.0.5 0.006 0.003 17.11 8.0.3 0.011 0.011 17.29 8.0.2 0.011 0.011 17.50 8.0.1 0.000 0.009 17.32 8.0.0 0.014 0.010 16.82 7.4.33 0.003 0.003 15.55 7.4.32 0.003 0.006 16.80 7.4.30 0.005 0.002 16.73 7.4.29 0.004 0.004 16.80 7.4.28 0.007 0.004 16.87 7.4.27 0.006 0.003 16.77 7.4.26 0.000 0.008 16.86 7.4.25 0.000 0.009 16.84 7.4.24 0.000 0.008 16.92 7.4.23 0.004 0.004 16.76 7.4.22 0.013 0.007 16.74 7.4.21 0.008 0.012 16.75 7.4.20 0.003 0.006 16.98 7.4.16 0.008 0.011 16.80 7.4.15 0.004 0.018 17.40 7.4.14 0.010 0.015 17.86 7.4.13 0.012 0.012 16.88 7.4.12 0.016 0.012 16.79 7.4.11 0.011 0.011 16.80 7.4.10 0.015 0.012 16.86 7.4.9 0.015 0.006 16.91 7.4.8 0.014 0.010 19.39 7.4.7 0.009 0.012 16.78 7.4.6 0.013 0.007 16.75 7.4.5 0.012 0.006 16.71 7.4.4 0.005 0.013 16.73 7.4.3 0.017 0.003 16.85 7.4.0 0.006 0.013 15.54 7.3.33 0.003 0.007 13.64 7.3.32 0.009 0.000 13.61 7.3.31 0.006 0.003 16.51 7.3.30 0.006 0.003 16.65 7.3.29 0.004 0.012 16.66 7.3.28 0.009 0.012 16.61 7.3.27 0.009 0.011 17.40 7.3.26 0.022 0.021 16.82 7.3.25 0.010 0.013 16.81 7.3.24 0.006 0.014 16.62 7.3.23 0.017 0.007 16.88 7.3.21 0.013 0.006 16.89 7.3.20 0.007 0.014 16.81 7.3.19 0.003 0.017 16.61 7.3.18 0.004 0.015 16.94 7.3.17 0.014 0.010 16.66 7.3.16 0.006 0.016 16.63 7.3.1 0.010 0.009 16.80 7.3.0 0.007 0.012 16.82 7.2.33 0.006 0.016 16.81 7.2.32 0.014 0.012 17.04 7.2.31 0.018 0.003 16.82 7.2.30 0.010 0.010 16.68 7.2.29 0.009 0.018 16.95 7.2.13 0.008 0.011 16.95 7.2.12 0.008 0.013 16.82 7.2.11 0.006 0.012 16.66 7.2.10 0.006 0.012 17.05 7.2.9 0.011 0.006 17.08 7.2.8 0.009 0.008 16.80 7.2.7 0.014 0.006 16.95 7.2.6 0.007 0.008 17.12 7.2.5 0.010 0.008 17.16 7.2.4 0.008 0.013 16.93 7.2.3 0.009 0.009 16.86 7.2.2 0.014 0.006 16.93 7.2.1 0.005 0.014 16.82 7.2.0 0.017 0.008 18.11 7.1.25 0.014 0.007 15.93 7.1.20 0.006 0.012 15.75 7.1.10 0.006 0.006 18.47 7.1.7 0.006 0.009 17.42 7.1.6 0.103 0.017 33.58 7.1.5 0.097 0.023 33.09 7.1.4 0.140 0.020 32.98 7.1.3 0.170 0.013 33.03 7.1.2 0.130 0.017 33.06 7.1.1 0.130 0.017 15.36 7.1.0 0.103 0.013 15.23 7.0.20 0.123 0.017 15.21 7.0.19 0.133 0.007 15.23 7.0.18 0.097 0.017 14.74 7.0.17 0.153 0.017 14.96 7.0.16 0.147 0.017 14.49 7.0.15 0.100 0.017 14.65 7.0.14 0.110 0.010 14.68 7.0.13 0.107 0.017 14.94 7.0.12 0.113 0.017 15.01 7.0.11 0.110 0.017 14.62 7.0.10 0.123 0.010 14.82 7.0.9 0.077 0.010 14.88 7.0.8 0.007 0.013 15.02 7.0.7 0.017 0.010 14.64 7.0.6 0.007 0.020 14.61 7.0.5 0.143 0.013 14.66 7.0.4 0.097 0.010 14.84 7.0.3 0.120 0.013 14.83 7.0.2 0.107 0.017 14.71 7.0.1 0.110 0.013 14.59 7.0.0 0.110 0.007 14.78
preferences:dark mode live preview
61.85 ms | 400 KiB | 5 Q