@ 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.
Output for 7.0.0 - 7.0.20 , 7.1.0 - 7.1.20 , 7.2.5 - 7.2.33 , 7.3.16 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.4 , 8.3.6 ***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
Output for 8.3.5 Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
preferences:dark mode live preview
180.47 ms | 403 KiB | 172 Q