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 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"; ?>

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).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.40.0070.01018.96
8.3.30.0110.00718.93
8.3.20.0060.00321.85
8.3.10.0060.00321.90
8.3.00.0030.00619.80
8.2.170.0100.00722.96
8.2.160.0100.01320.65
8.2.150.0060.00324.18
8.2.140.0040.00424.66
8.2.130.0090.00020.63
8.2.120.0090.00026.35
8.2.110.0090.00321.19
8.2.100.0080.00518.28
8.2.90.0030.00618.00
8.2.80.0040.00718.00
8.2.70.0000.00918.29
8.2.60.0030.00718.47
8.2.50.0060.00318.10
8.2.40.0030.00622.27
8.2.30.0040.00419.50
8.2.20.0030.00618.39
8.2.10.0030.00618.36
8.2.00.0060.00318.34
8.1.270.0040.00820.79
8.1.260.0040.00426.35
8.1.250.0040.00428.09
8.1.240.0050.00522.32
8.1.230.0000.01322.66
8.1.220.0000.01017.90
8.1.210.0000.01118.77
8.1.200.0110.00017.73
8.1.190.0070.00417.60
8.1.180.0000.01018.10
8.1.170.0060.00319.07
8.1.160.0060.00319.02
8.1.150.0000.00820.34
8.1.140.0030.00619.72
8.1.130.0030.00719.09
8.1.120.0100.00017.71
8.1.110.0030.00717.75
8.1.100.0060.00317.68
8.1.90.0000.00917.80
8.1.80.0060.00317.76
8.1.70.0040.00417.71
8.1.60.0070.00317.76
8.1.50.0030.00617.71
8.1.40.0100.00017.81
8.1.30.0060.00317.83
8.1.20.0060.00317.77
8.1.10.0030.00617.82
8.1.00.0040.00417.80
8.0.300.0030.00620.21
8.0.290.0000.00917.00
8.0.280.0030.00518.67
8.0.270.0030.00617.48
8.0.260.0040.00419.06
8.0.250.0050.00317.22
8.0.240.0050.00517.34
8.0.230.0060.00317.27
8.0.220.0000.00817.18
8.0.210.0000.00917.25
8.0.200.0000.00817.32
8.0.190.0080.00517.27
8.0.180.0000.00917.25
8.0.170.0040.00417.18
8.0.160.0080.00017.35
8.0.150.0060.00317.08
8.0.140.0000.00917.04
8.0.130.0070.00013.65
8.0.120.0040.00717.11
8.0.110.0090.00017.09
8.0.100.0030.00617.09
8.0.90.0060.00317.14
8.0.80.0120.01317.19
8.0.70.0060.00617.23
8.0.60.0000.01017.22
8.0.50.0060.00317.11
8.0.30.0110.01117.29
8.0.20.0110.01117.50
8.0.10.0000.00917.32
8.0.00.0140.01016.82
7.4.330.0030.00315.55
7.4.320.0030.00616.80
7.4.300.0050.00216.73
7.4.290.0040.00416.80
7.4.280.0070.00416.87
7.4.270.0060.00316.77
7.4.260.0000.00816.86
7.4.250.0000.00916.84
7.4.240.0000.00816.92
7.4.230.0040.00416.76
7.4.220.0130.00716.74
7.4.210.0080.01216.75
7.4.200.0030.00616.98
7.4.160.0080.01116.80
7.4.150.0040.01817.40
7.4.140.0100.01517.86
7.4.130.0120.01216.88
7.4.120.0160.01216.79
7.4.110.0110.01116.80
7.4.100.0150.01216.86
7.4.90.0150.00616.91
7.4.80.0140.01019.39
7.4.70.0090.01216.78
7.4.60.0130.00716.75
7.4.50.0120.00616.71
7.4.40.0050.01316.73
7.4.30.0170.00316.85
7.4.00.0060.01315.54
7.3.330.0030.00713.64
7.3.320.0090.00013.61
7.3.310.0060.00316.51
7.3.300.0060.00316.65
7.3.290.0040.01216.66
7.3.280.0090.01216.61
7.3.270.0090.01117.40
7.3.260.0220.02116.82
7.3.250.0100.01316.81
7.3.240.0060.01416.62
7.3.230.0170.00716.88
7.3.210.0130.00616.89
7.3.200.0070.01416.81
7.3.190.0030.01716.61
7.3.180.0040.01516.94
7.3.170.0140.01016.66
7.3.160.0060.01616.63
7.3.10.0100.00916.80
7.3.00.0070.01216.82
7.2.330.0060.01616.81
7.2.320.0140.01217.04
7.2.310.0180.00316.82
7.2.300.0100.01016.68
7.2.290.0090.01816.95
7.2.130.0080.01116.95
7.2.120.0080.01316.82
7.2.110.0060.01216.66
7.2.100.0060.01217.05
7.2.90.0110.00617.08
7.2.80.0090.00816.80
7.2.70.0140.00616.95
7.2.60.0070.00817.12
7.2.50.0100.00817.16
7.2.40.0080.01316.93
7.2.30.0090.00916.86
7.2.20.0140.00616.93
7.2.10.0050.01416.82
7.2.00.0170.00818.11
7.1.250.0140.00715.93
7.1.200.0060.01215.75
7.1.100.0060.00618.47
7.1.70.0060.00917.42
7.1.60.1030.01733.58
7.1.50.0970.02333.09
7.1.40.1400.02032.98
7.1.30.1700.01333.03
7.1.20.1300.01733.06
7.1.10.1300.01715.36
7.1.00.1030.01315.23
7.0.200.1230.01715.21
7.0.190.1330.00715.23
7.0.180.0970.01714.74
7.0.170.1530.01714.96
7.0.160.1470.01714.49
7.0.150.1000.01714.65
7.0.140.1100.01014.68
7.0.130.1070.01714.94
7.0.120.1130.01715.01
7.0.110.1100.01714.62
7.0.100.1230.01014.82
7.0.90.0770.01014.88
7.0.80.0070.01315.02
7.0.70.0170.01014.64
7.0.60.0070.02014.61
7.0.50.1430.01314.66
7.0.40.0970.01014.84
7.0.30.1200.01314.83
7.0.20.1070.01714.71
7.0.10.1100.01314.59
7.0.00.1100.00714.78

preferences:
61.85 ms | 400 KiB | 5 Q