@ 2017-06-16T18:58:31Z <?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.7 0.010 0.006 16.75 8.3.6 0.013 0.007 18.32 8.3.5 0.015 0.007 17.53 8.3.4 0.003 0.013 18.71 8.3.3 0.006 0.010 18.83 8.3.2 0.004 0.004 21.77 8.3.1 0.009 0.000 21.90 8.3.0 0.009 0.000 19.68 8.2.18 0.004 0.012 18.29 8.2.17 0.010 0.007 22.96 8.2.16 0.006 0.009 20.68 8.2.15 0.003 0.006 24.18 8.2.14 0.004 0.004 24.66 8.2.13 0.009 0.006 26.16 8.2.12 0.004 0.004 21.06 8.2.11 0.003 0.009 20.99 8.2.10 0.006 0.006 18.09 8.2.9 0.004 0.004 18.28 8.2.8 0.003 0.007 17.97 8.2.7 0.009 0.000 17.88 8.2.6 0.004 0.004 18.05 8.2.5 0.004 0.004 18.07 8.2.4 0.000 0.008 18.47 8.2.3 0.003 0.006 18.16 8.2.2 0.004 0.004 18.20 8.2.1 0.000 0.009 18.21 8.2.0 0.008 0.000 18.21 8.1.28 0.016 0.000 25.92 8.1.27 0.003 0.006 20.76 8.1.26 0.005 0.003 26.35 8.1.25 0.006 0.003 28.09 8.1.24 0.010 0.000 22.80 8.1.23 0.009 0.003 21.00 8.1.22 0.003 0.007 17.91 8.1.21 0.003 0.006 18.95 8.1.20 0.005 0.005 17.73 8.1.19 0.000 0.008 17.60 8.1.18 0.006 0.008 18.10 8.1.17 0.003 0.006 18.96 8.1.16 0.004 0.004 19.06 8.1.15 0.000 0.009 20.33 8.1.14 0.005 0.005 19.75 8.1.13 0.003 0.006 19.23 8.1.12 0.005 0.003 17.84 8.1.11 0.003 0.006 17.63 8.1.10 0.003 0.006 17.84 8.1.9 0.006 0.003 17.77 8.1.8 0.000 0.009 17.80 8.1.7 0.006 0.003 17.72 8.1.6 0.000 0.009 17.84 8.1.5 0.000 0.010 17.71 8.1.4 0.004 0.004 17.79 8.1.3 0.003 0.006 17.93 8.1.2 0.000 0.009 17.95 8.1.1 0.004 0.004 17.76 8.1.0 0.000 0.009 17.84 8.0.30 0.003 0.006 20.19 8.0.29 0.000 0.008 17.00 8.0.28 0.005 0.003 18.57 8.0.27 0.005 0.003 17.34 8.0.26 0.004 0.004 19.08 8.0.25 0.000 0.009 17.18 8.0.24 0.006 0.003 17.34 8.0.23 0.003 0.006 17.23 8.0.22 0.005 0.003 17.21 8.0.21 0.000 0.008 17.24 8.0.20 0.007 0.000 17.25 8.0.19 0.010 0.003 17.16 8.0.18 0.005 0.003 17.21 8.0.17 0.000 0.008 17.16 8.0.16 0.000 0.008 17.20 8.0.15 0.009 0.000 17.07 8.0.14 0.000 0.009 17.08 8.0.13 0.003 0.005 13.61 8.0.12 0.008 0.000 17.09 8.0.11 0.003 0.006 17.14 8.0.10 0.003 0.006 17.02 8.0.9 0.000 0.008 17.17 8.0.8 0.007 0.010 17.23 8.0.7 0.007 0.003 17.06 8.0.6 0.006 0.003 17.35 8.0.5 0.006 0.003 17.11 8.0.3 0.011 0.009 17.53 8.0.2 0.013 0.007 17.40 8.0.1 0.003 0.006 17.22 8.0.0 0.007 0.014 17.04 7.4.33 0.003 0.003 15.55 7.4.32 0.004 0.004 16.70 7.4.30 0.000 0.007 16.82 7.4.29 0.000 0.008 16.75 7.4.28 0.009 0.000 16.84 7.4.27 0.004 0.004 16.83 7.4.26 0.003 0.006 16.85 7.4.25 0.000 0.008 16.88 7.4.24 0.000 0.008 16.77 7.4.23 0.000 0.009 16.95 7.4.22 0.013 0.012 16.82 7.4.21 0.010 0.007 16.91 7.4.20 0.000 0.008 16.78 7.4.16 0.008 0.010 16.69 7.4.15 0.011 0.008 17.40 7.4.14 0.012 0.008 17.86 7.4.13 0.008 0.012 16.82 7.4.12 0.007 0.015 16.68 7.4.11 0.008 0.011 16.69 7.4.10 0.003 0.017 16.89 7.4.9 0.015 0.003 16.84 7.4.8 0.007 0.014 19.39 7.4.7 0.017 0.003 16.72 7.4.6 0.014 0.010 16.79 7.4.5 0.013 0.003 16.68 7.4.4 0.009 0.009 16.85 7.4.3 0.015 0.007 16.91 7.4.0 0.007 0.009 15.21 7.3.33 0.004 0.004 13.65 7.3.32 0.008 0.000 13.57 7.3.31 0.004 0.004 16.48 7.3.30 0.003 0.006 16.61 7.3.29 0.003 0.006 16.55 7.3.28 0.008 0.011 16.62 7.3.27 0.009 0.009 17.40 7.3.26 0.010 0.010 16.70 7.3.25 0.012 0.012 16.66 7.3.24 0.010 0.013 16.73 7.3.23 0.003 0.016 16.88 7.3.21 0.016 0.004 16.77 7.3.20 0.017 0.003 16.59 7.3.19 0.006 0.012 16.92 7.3.18 0.006 0.012 16.91 7.3.17 0.006 0.013 16.63 7.3.16 0.004 0.014 16.78 7.3.12 0.010 0.010 15.23 7.3.11 0.006 0.013 14.98 7.3.10 0.006 0.009 15.35 7.3.9 0.007 0.007 15.13 7.3.8 0.003 0.014 15.08 7.3.7 0.008 0.012 15.23 7.3.6 0.007 0.010 15.14 7.3.5 0.003 0.010 15.16 7.3.4 0.010 0.006 15.27 7.3.3 0.003 0.006 15.11 7.3.2 0.006 0.009 16.83 7.3.1 0.003 0.010 16.96 7.3.0 0.006 0.009 16.70 7.2.33 0.008 0.011 16.77 7.2.32 0.006 0.013 16.89 7.2.31 0.014 0.006 17.12 7.2.30 0.012 0.008 16.75 7.2.29 0.007 0.011 17.23 7.2.25 0.004 0.015 15.33 7.2.24 0.012 0.009 15.49 7.2.23 0.007 0.013 15.34 7.2.22 0.003 0.010 15.52 7.2.21 0.010 0.010 14.95 7.2.20 0.008 0.004 15.44 7.2.19 0.006 0.009 15.30 7.2.18 0.007 0.010 15.22 7.2.17 0.000 0.018 15.25 7.2.6 0.004 0.011 17.03 7.2.0 0.007 0.007 19.62 7.1.33 0.000 0.015 16.10 7.1.32 0.010 0.006 16.10 7.1.31 0.006 0.012 16.25 7.1.30 0.003 0.010 15.79 7.1.29 0.006 0.010 15.92 7.1.28 0.003 0.010 16.12 7.1.27 0.004 0.008 15.82 7.1.26 0.006 0.006 15.87 7.1.20 0.010 0.007 16.28 7.1.10 0.008 0.008 17.95 7.1.7 0.006 0.003 17.46 7.1.6 0.160 0.023 33.71 7.1.5 0.170 0.023 33.39 7.1.4 0.107 0.013 32.90 7.1.3 0.120 0.020 32.96 7.1.2 0.100 0.017 33.12 7.1.1 0.087 0.010 15.20 7.1.0 0.087 0.013 15.24 7.0.20 0.147 0.007 15.40 7.0.19 0.180 0.017 15.06 7.0.18 0.160 0.007 14.44 7.0.17 0.143 0.003 14.92 7.0.16 0.137 0.013 14.70 7.0.15 0.083 0.007 14.74 7.0.14 0.090 0.007 14.66 7.0.13 0.130 0.017 14.84 7.0.12 0.087 0.017 15.01 7.0.11 0.080 0.013 14.68 7.0.10 0.080 0.013 14.64 7.0.9 0.077 0.010 14.69 7.0.8 0.077 0.007 14.75 7.0.7 0.093 0.007 14.67 7.0.6 0.103 0.010 14.59 7.0.5 0.077 0.010 14.73 7.0.4 0.097 0.007 14.80 7.0.3 0.083 0.010 15.08 7.0.2 0.070 0.013 15.03 7.0.1 0.107 0.007 14.86 7.0.0 0.083 0.010 14.73
preferences:dark mode live preview
62.34 ms | 401 KiB | 5 Q