3v4l.org

run code in 300+ PHP versions simultaneously
<?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 minutosDiferencia($horaMayor, $horaMenor){ $resultadoResta = strtotime($horaMayor) - strtotime($horaMenor); echo "Resultado resta ". date("H:i", $resultadoResta)."\n"; } function agregarOffsetHora($hora, $tipoCaso, $inicioMatutino, $inicioVespertino, $finMatutino, $finVespertino, $offset){ //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 ".$offset." a ".$hora."\n"; echo "Hora estimada: " . date('H:i', strtotime($hora . " +30 minutes") ) . "\n"; } //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"; minutosDiferencia($finMatutino, $hora); } //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"; } //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"; minutosDiferencia($finVespertino, $hora); } //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"; } } } 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); agregarOffsetHora($horaMinuto, $tipoCaso, $horaInicioMatutino, $horaInicioVespertino, $horaFinMatutino, $horaFinVespertino, $minutosTolerancia ); echo "\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 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"; ?>
Output for 7.0.0 - 7.0.20, 7.1.0 - 7.1.20, 7.2.0 - 7.2.33, 7.3.16 - 7.3.31, 7.4.0 - 7.4.25, 7.4.27 - 7.4.33, 8.0.0 - 8.0.12, 8.0.14 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.4, 8.3.6
fecha: 2017-06-15 horaMinuto: 08:00 noDia: 4 tipoHorario: Descanso vespertino tipoCaso: Caso especial vespertino en descanso Se le sumará el offset entero 30 a la horaInicioMatutino: 09:00 Hora estimada: 09:30 *************************** fecha: 2017-06-15 horaMinuto: 09:00 noDia: 4 tipoHorario: Matutino tipoCaso: Caso normal matutino Se le sumará el offset 30 a 09:00 Hora estimada: 09:30 *************************** fecha: 2017-06-15 horaMinuto: 12:50 noDia: 4 tipoHorario: Matutino tipoCaso: Caso normal matutino Se le sumará el offset 30 a 12:50 Hora estimada: 13:20 *************************** fecha: 2017-06-15 horaMinuto: 14:29 noDia: 4 tipoHorario: Matutino tipoCaso: Caso normal matutino Se le sumará el offset 30 a 14:29 Hora estimada: 14:59 *************************** fecha: 2017-06-15 horaMinuto: 14:30 noDia: 4 tipoHorario: Matutino tipoCaso: Caso especial matutino Se le sumará el sobrante de 30 a la horaInicioVespertino: 16:30 Resultado resta 01:30 *************************** fecha: 2017-06-15 horaMinuto: 16:29 noDia: 4 tipoHorario: Descanso matutino tipoCaso: Caso especial matutino en descanso Se le sumará el offset entero 30 a la horaInicioVespertino: 16:30 Hora estimada: 17:00 *************************** fecha: 2017-06-15 horaMinuto: 16:30 noDia: 4 tipoHorario: Vespertino tipoCaso: Caso normal vespertino Se le sumará el offset 30 a 16:30 Hora estimada: 17:00 *************************** fecha: 2017-06-15 horaMinuto: 17:59 noDia: 4 tipoHorario: Vespertino tipoCaso: Caso normal vespertino Se le sumará el offset 30 a 17:59 Hora estimada: 18:29 *************************** fecha: 2017-06-15 horaMinuto: 18:00 noDia: 4 tipoHorario: Vespertino tipoCaso: Caso especial vespertino Se le sumará el sobrante de 30 a la horaInicioMatutino: 09:00 Resultado resta 01:30 *************************** fecha: 2017-06-15 horaMinuto: 18:29 noDia: 4 tipoHorario: Vespertino tipoCaso: Caso especial vespertino Se le sumará el sobrante de 30 a la horaInicioMatutino: 09:00 Resultado resta 01:01 *************************** fecha: 2017-06-15 horaMinuto: 18:30 noDia: 4 tipoHorario: Descanso vespertino tipoCaso: Caso especial vespertino en descanso Se le sumará el offset entero 30 a la horaInicioMatutino: 09:00 Hora estimada: 09:30 *************************** fecha: 2017-06-15 horaMinuto: 19:29 noDia: 4 tipoHorario: Descanso vespertino tipoCaso: Caso especial vespertino en descanso Se le sumará el offset entero 30 a la horaInicioMatutino: 09:00 Hora estimada: 09:30 ***************************
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 fecha: 2017-06-15 horaMinuto: 08:00 noDia: 4 tipoHorario: Descanso vespertino tipoCaso: Caso especial vespertino en descanso Se le sumará el offset entero 30 a la horaInicioMatutino: 09:00 Hora estimada: 09:30 *************************** fecha: 2017-06-15 horaMinuto: 09:00 noDia: 4 tipoHorario: Matutino tipoCaso: Caso normal matutino Se le sumará el offset 30 a 09:00 Hora estimada: 09:30 *************************** fecha: 2017-06-15 horaMinuto: 12:50 noDia: 4 tipoHorario: Matutino tipoCaso: Caso normal matutino Se le sumará el offset 30 a 12:50 Hora estimada: 13:20 *************************** fecha: 2017-06-15 horaMinuto: 14:29 noDia: 4 tipoHorario: Matutino tipoCaso: Caso normal matutino Se le sumará el offset 30 a 14:29 Hora estimada: 14:59 *************************** fecha: 2017-06-15 horaMinuto: 14:30 noDia: 4 tipoHorario: Matutino tipoCaso: Caso especial matutino Se le sumará el sobrante de 30 a la horaInicioVespertino: 16:30 Resultado resta 01:30 *************************** fecha: 2017-06-15 horaMinuto: 16:29 noDia: 4 tipoHorario: Descanso matutino tipoCaso: Caso especial matutino en descanso Se le sumará el offset entero 30 a la horaInicioVespertino: 16:30 Hora estimada: 17:00 *************************** fecha: 2017-06-15 horaMinuto: 16:30 noDia: 4 tipoHorario: Vespertino tipoCaso: Caso normal vespertino Se le sumará el offset 30 a 16:30 Hora estimada: 17:00 *************************** fecha: 2017-06-15 horaMinuto: 17:59 noDia: 4 tipoHorario: Vespertino tipoCaso: Caso normal vespertino Se le sumará el offset 30 a 17:59 Hora estimada: 18:29 *************************** fecha: 2017-06-15 horaMinuto: 18:00 noDia: 4 tipoHorario: Vespertino tipoCaso: Caso especial vespertino Se le sumará el sobrante de 30 a la horaInicioMatutino: 09:00 Resultado resta 01:30 *************************** fecha: 2017-06-15 horaMinuto: 18:29 noDia: 4 tipoHorario: Vespertino tipoCaso: Caso especial vespertino Se le sumará el sobrante de 30 a la horaInicioMatutino: 09:00 Resultado resta 01:01 *************************** fecha: 2017-06-15 horaMinuto: 18:30 noDia: 4 tipoHorario: Descanso vespertino tipoCaso: Caso especial vespertino en descanso Se le sumará el offset entero 30 a la horaInicioMatutino: 09:00 Hora estimada: 09:30 *************************** fecha: 2017-06-15 horaMinuto: 19:29 noDia: 4 tipoHorario: Descanso vespertino tipoCaso: Caso especial vespertino en descanso Se le sumará el offset entero 30 a la horaInicioMatutino: 09:00 Hora estimada: 09:30 ***************************
Output for 7.3.32 - 7.3.33, 7.4.26, 8.0.13
fecha: 2017-06-15 horaMinuto: 08:00 noDia: 4 tipoHorario: Descanso vespertino tipoCaso: Caso especial vespertino en descanso Se le sumará el offset entero 30 a la horaInicioMatutino: 09:00 Hora estimada: 09:30 *************************** fecha: 2017-06-15 horaMinuto: 09:00 noDia: 4 tipoHorario: Matutino tipoCaso: Caso normal matutino Se le sumará el offset 30 a 09:00 Hora estimada: 09:30 *************************** fecha: 2017-06-15 horaMinuto: 12:50 noDia: 4 tipoHorario: Matutino tipoCaso: Caso normal matutino Se le sumará el offset 30 a 12:50 Hora estimada: 13:20 *************************** fecha: 2017-06-15 horaMinuto: 14:29 noDia: 4 tipoHorario: Matutino tipoCaso: Caso normal matutino Se le sumará el offset 30 a 14:29 Hora estimada: 14:59 *************************** fecha: 2017-06-15 horaMinuto: 14:30 noDia: 4 tipoHorario: Matutino tipoCaso: Caso especial matutino Se le sumará el sobrante de 30 a la horaInicioVespertino: 16:30 Resultado resta 00:30 *************************** fecha: 2017-06-15 horaMinuto: 16:29 noDia: 4 tipoHorario: Descanso matutino tipoCaso: Caso especial matutino en descanso Se le sumará el offset entero 30 a la horaInicioVespertino: 16:30 Hora estimada: 17:00 *************************** fecha: 2017-06-15 horaMinuto: 16:30 noDia: 4 tipoHorario: Vespertino tipoCaso: Caso normal vespertino Se le sumará el offset 30 a 16:30 Hora estimada: 17:00 *************************** fecha: 2017-06-15 horaMinuto: 17:59 noDia: 4 tipoHorario: Vespertino tipoCaso: Caso normal vespertino Se le sumará el offset 30 a 17:59 Hora estimada: 18:29 *************************** fecha: 2017-06-15 horaMinuto: 18:00 noDia: 4 tipoHorario: Vespertino tipoCaso: Caso especial vespertino Se le sumará el sobrante de 30 a la horaInicioMatutino: 09:00 Resultado resta 00:30 *************************** fecha: 2017-06-15 horaMinuto: 18:29 noDia: 4 tipoHorario: Vespertino tipoCaso: Caso especial vespertino Se le sumará el sobrante de 30 a la horaInicioMatutino: 09:00 Resultado resta 00:01 *************************** fecha: 2017-06-15 horaMinuto: 18:30 noDia: 4 tipoHorario: Descanso vespertino tipoCaso: Caso especial vespertino en descanso Se le sumará el offset entero 30 a la horaInicioMatutino: 09:00 Hora estimada: 09:30 *************************** fecha: 2017-06-15 horaMinuto: 19:29 noDia: 4 tipoHorario: Descanso vespertino tipoCaso: Caso especial vespertino en descanso Se le sumará el offset entero 30 a la horaInicioMatutino: 09:00 Hora estimada: 09:30 ***************************

preferences:
157.85 ms | 409 KiB | 173 Q