@ 2017-06-16T18:58:11Z <?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 getFechaHoraEstimada($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 "\nFecha estimada obtenida: " . $fechaEstimada."\n";
//echo "Hora estimada obtenida: " . $horaEstimada."\n\n";
//echo "Resultado= " . date('Y-m-d H:i:s', strtotime( $fechaEstimada." ".$horaEstimada ) );
return date('Y-m-d H:i:s', strtotime( $fechaEstimada." ".$horaEstimada ) );
}
getFechaHoraEstimada("2017-06-16 08:00:00",30);
echo "***************************\n\n";
getFechaHoraEstimada("2017-06-16 09:00:00",30);
echo "***************************\n\n";
getFechaHoraEstimada("2017-06-16 12:50:00",30);
echo "***************************\n\n";
getFechaHoraEstimada("2017-06-16 14:29:00",30);
echo "***************************\n\n";
getFechaHoraEstimada("2017-06-16 14:30:00",30);
echo "***************************\n\n";
getFechaHoraEstimada("2017-06-16 14:35:00",30);
echo "***************************\n\n";
getFechaHoraEstimada("2017-06-16 14:55:00",30);
echo "***************************\n\n";
getFechaHoraEstimada("2017-06-16 16:29:00",30);
echo "***************************\n\n";
getFechaHoraEstimada("2017-06-16 16:30:00",30);
echo "***************************\n\n";
getFechaHoraEstimada("2017-06-16 17:59:00",30);
echo "***************************\n\n";
getFechaHoraEstimada("2017-06-16 18:00:00",30);
echo "***************************\n\n";
getFechaHoraEstimada("2017-06-16 18:29:00",30);
echo "***************************\n\n";
getFechaHoraEstimada("2017-06-16 18:30:00",30);
echo "***************************\n\n";
getFechaHoraEstimada("2017-06-16 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.6 0.017 0.007 16.75 8.3.5 0.008 0.008 16.52 8.3.4 0.006 0.010 19.02 8.3.3 0.009 0.006 18.89 8.3.2 0.005 0.003 21.91 8.3.1 0.008 0.000 21.87 8.3.0 0.006 0.003 19.66 8.2.18 0.007 0.013 18.54 8.2.17 0.016 0.006 22.96 8.2.16 0.009 0.006 20.47 8.2.15 0.004 0.004 24.18 8.2.14 0.006 0.003 24.66 8.2.13 0.005 0.003 20.60 8.2.12 0.003 0.006 26.35 8.2.11 0.007 0.003 21.06 8.2.10 0.006 0.006 18.09 8.2.9 0.000 0.008 18.28 8.2.8 0.009 0.003 18.05 8.2.7 0.003 0.006 18.29 8.2.6 0.004 0.004 18.34 8.2.5 0.008 0.000 18.10 8.2.4 0.000 0.009 22.40 8.2.3 0.005 0.003 19.45 8.2.2 0.005 0.003 18.34 8.2.1 0.006 0.003 18.40 8.2.0 0.004 0.004 18.40 8.1.28 0.013 0.010 25.92 8.1.27 0.004 0.004 20.73 8.1.26 0.003 0.005 26.35 8.1.25 0.000 0.008 28.09 8.1.24 0.000 0.010 22.30 8.1.23 0.008 0.004 22.73 8.1.22 0.003 0.006 17.91 8.1.21 0.003 0.006 19.07 8.1.20 0.008 0.003 17.60 8.1.19 0.004 0.007 17.60 8.1.18 0.004 0.004 18.10 8.1.17 0.006 0.003 18.88 8.1.16 0.008 0.000 19.04 8.1.15 0.000 0.008 20.40 8.1.14 0.008 0.000 19.78 8.1.13 0.006 0.003 19.02 8.1.12 0.000 0.008 17.82 8.1.11 0.000 0.008 17.83 8.1.10 0.003 0.005 17.83 8.1.9 0.005 0.003 17.78 8.1.8 0.000 0.009 17.76 8.1.7 0.004 0.004 17.82 8.1.6 0.003 0.006 17.87 8.1.5 0.006 0.003 17.80 8.1.4 0.006 0.003 17.70 8.1.3 0.003 0.006 17.95 8.1.2 0.006 0.003 17.82 8.1.1 0.000 0.009 17.87 8.1.0 0.003 0.006 17.62 8.0.30 0.006 0.003 19.96 8.0.29 0.003 0.005 17.00 8.0.28 0.008 0.000 18.71 8.0.27 0.004 0.004 17.34 8.0.26 0.000 0.007 18.94 8.0.25 0.008 0.000 17.20 8.0.24 0.006 0.003 17.32 8.0.23 0.000 0.009 17.16 8.0.22 0.003 0.005 17.15 8.0.21 0.007 0.000 17.16 8.0.20 0.000 0.007 17.21 8.0.19 0.006 0.006 17.16 8.0.18 0.009 0.000 17.25 8.0.17 0.003 0.005 17.29 8.0.16 0.006 0.003 17.20 8.0.15 0.003 0.006 17.27 8.0.14 0.000 0.008 17.21 8.0.13 0.005 0.002 13.63 8.0.12 0.000 0.008 17.19 8.0.11 0.003 0.005 17.26 8.0.10 0.003 0.006 17.28 8.0.9 0.000 0.008 17.10 8.0.8 0.003 0.013 17.24 8.0.7 0.000 0.010 17.21 8.0.6 0.006 0.003 17.10 8.0.5 0.004 0.004 17.27 8.0.3 0.009 0.010 17.32 8.0.2 0.011 0.010 17.41 8.0.1 0.003 0.005 17.18 8.0.0 0.013 0.009 17.07 7.4.33 0.006 0.000 15.55 7.4.32 0.003 0.003 16.77 7.4.30 0.000 0.007 16.77 7.4.29 0.000 0.008 16.79 7.4.28 0.000 0.009 16.76 7.4.27 0.000 0.008 16.76 7.4.26 0.004 0.004 16.73 7.4.25 0.004 0.004 16.90 7.4.24 0.004 0.004 16.88 7.4.23 0.005 0.003 16.68 7.4.22 0.010 0.016 16.70 7.4.21 0.009 0.012 16.94 7.4.20 0.004 0.004 16.78 7.4.16 0.007 0.010 16.78 7.4.15 0.000 0.020 17.40 7.4.14 0.009 0.015 17.86 7.4.13 0.010 0.010 16.79 7.4.12 0.014 0.008 16.71 7.4.11 0.010 0.010 16.91 7.4.10 0.011 0.015 16.81 7.4.9 0.016 0.004 16.73 7.4.8 0.007 0.014 19.39 7.4.7 0.015 0.003 16.71 7.4.6 0.013 0.009 16.82 7.4.5 0.010 0.007 17.01 7.4.4 0.009 0.009 17.05 7.4.3 0.011 0.007 16.82 7.4.0 0.006 0.010 14.97 7.3.33 0.000 0.009 13.60 7.3.32 0.006 0.000 13.41 7.3.31 0.005 0.002 16.73 7.3.30 0.000 0.008 16.67 7.3.29 0.007 0.009 16.59 7.3.28 0.010 0.008 16.64 7.3.27 0.016 0.003 17.40 7.3.26 0.011 0.010 16.81 7.3.25 0.011 0.011 16.69 7.3.24 0.017 0.005 16.73 7.3.23 0.012 0.006 17.06 7.3.21 0.006 0.012 16.53 7.3.20 0.011 0.006 16.72 7.3.19 0.009 0.018 16.73 7.3.18 0.011 0.007 16.79 7.3.17 0.008 0.012 16.74 7.3.16 0.018 0.000 16.74 7.2.33 0.010 0.010 17.20 7.2.32 0.009 0.009 17.14 7.2.31 0.011 0.008 17.12 7.2.30 0.009 0.013 16.79 7.2.29 0.009 0.009 16.90 7.2.6 0.000 0.017 17.17 7.2.5 0.010 0.007 17.05 7.1.20 0.006 0.009 15.86 7.1.7 0.000 0.009 17.51 7.1.6 0.097 0.010 33.52 7.1.5 0.077 0.017 33.27 7.1.4 0.163 0.017 32.89 7.1.3 0.127 0.010 33.02 7.1.2 0.093 0.010 33.16 7.1.1 0.123 0.017 15.09 7.1.0 0.120 0.013 15.25 7.0.20 0.077 0.010 15.36 7.0.19 0.083 0.010 14.97 7.0.18 0.100 0.017 14.46 7.0.17 0.113 0.013 14.72 7.0.16 0.137 0.013 15.00 7.0.15 0.133 0.007 14.77 7.0.14 0.153 0.017 14.71 7.0.13 0.110 0.007 15.12 7.0.12 0.090 0.010 14.88 7.0.11 0.087 0.013 14.66 7.0.10 0.087 0.013 14.54 7.0.9 0.097 0.017 14.52 7.0.8 0.090 0.010 14.71 7.0.7 0.090 0.013 14.80 7.0.6 0.077 0.013 14.39 7.0.5 0.067 0.017 14.64 7.0.4 0.077 0.003 15.08 7.0.3 0.073 0.010 15.11 7.0.2 0.100 0.013 14.76 7.0.1 0.073 0.007 14.93 7.0.0 0.077 0.010 14.99
preferences:dark mode live preview
90.55 ms | 400 KiB | 5 Q