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

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.60.0100.00717.00
8.3.50.0080.00816.36
8.3.40.0090.00618.88
8.3.30.0090.00618.79
8.3.20.0030.00721.73
8.3.10.0000.00921.96
8.3.00.0090.00019.66
8.2.180.0030.01318.67
8.2.170.0160.00622.96
8.2.160.0100.00620.52
8.2.150.0030.00624.18
8.2.140.0040.00424.66
8.2.130.0080.00020.45
8.2.120.0030.00626.35
8.2.110.0070.00320.93
8.2.100.0070.00717.86
8.2.90.0030.00617.63
8.2.80.0000.00917.97
8.2.70.0030.00618.03
8.2.60.0030.00618.34
8.2.50.0000.01018.10
8.2.40.0060.00322.46
8.2.30.0080.00019.45
8.2.20.0030.00618.13
8.2.10.0040.00418.29
8.2.00.0000.00818.19
8.1.280.0060.01025.92
8.1.270.0030.00620.81
8.1.260.0030.00626.35
8.1.250.0080.00028.09
8.1.240.0060.00622.59
8.1.230.0090.00318.01
8.1.220.0030.00617.93
8.1.210.0000.00918.77
8.1.200.0060.00317.60
8.1.190.0060.00317.61
8.1.180.0000.01118.10
8.1.170.0100.00020.44
8.1.160.0040.00418.96
8.1.150.0090.00020.45
8.1.140.0030.00619.68
8.1.130.0070.00320.83
8.1.120.0000.00917.76
8.1.110.0000.00817.68
8.1.100.0000.00917.71
8.1.90.0030.00617.76
8.1.80.0000.00917.80
8.1.70.0000.00917.78
8.1.60.0000.01017.75
8.1.50.0030.00617.75
8.1.40.0030.00617.75
8.1.30.0030.00617.98
8.1.20.0030.00617.82
8.1.10.0000.00917.73
8.1.00.0040.00417.74
8.0.300.0030.00618.93
8.0.290.0030.00617.13
8.0.280.0030.00518.65
8.0.270.0050.00317.40
8.0.260.0000.00719.01
8.0.250.0040.00417.19
8.0.240.0000.00817.30
8.0.230.0050.00317.29
8.0.220.0030.00517.25
8.0.210.0000.00817.14
8.0.200.0040.00417.32
8.0.190.0060.00317.31
8.0.180.0060.00317.18
8.0.170.0030.00617.25
8.0.160.0000.00817.11
8.0.150.0060.00317.05
8.0.140.0000.00817.08
8.0.130.0040.00413.61
8.0.120.0030.00617.20
8.0.110.0070.00317.01
8.0.100.0000.00917.10
8.0.90.0000.00817.02
8.0.80.0100.01017.17
8.0.70.0030.00617.11
8.0.60.0000.00917.12
8.0.50.0030.00617.25
8.0.30.0130.01117.44
8.0.20.0130.00917.48
8.0.10.0000.00817.15
8.0.00.0100.01017.05
7.4.330.0000.00615.55
7.4.320.0040.00416.85
7.4.300.0090.00016.90
7.4.290.0040.00416.86
7.4.280.0000.00816.79
7.4.270.0050.00316.75
7.4.260.0000.00713.47
7.4.250.0030.00616.71
7.4.240.0000.00816.79
7.4.230.0030.00516.64
7.4.220.0130.01316.80
7.4.210.0100.01316.92
7.4.200.0000.00816.66
7.4.160.0130.00816.64
7.4.150.0150.00617.40
7.4.140.0140.01117.86
7.4.130.0150.00716.99
7.4.120.0100.01616.67
7.4.110.0180.00717.05
7.4.100.0100.00916.90
7.4.90.0140.01516.69
7.4.80.0060.01519.39
7.4.70.0050.01416.74
7.4.60.0150.00316.79
7.4.50.0130.00316.76
7.4.40.0060.01416.75
7.4.30.0090.01116.93
7.4.00.0060.01015.27
7.3.330.0040.00313.35
7.3.320.0000.00613.33
7.3.310.0080.00316.61
7.3.300.0040.00416.41
7.3.290.0060.01216.55
7.3.280.0090.01116.53
7.3.270.0160.01317.40
7.3.260.0130.01216.78
7.3.250.0110.01216.69
7.3.240.0070.01316.74
7.3.230.0150.00516.71
7.3.210.0110.00816.79
7.3.200.0030.01916.62
7.3.190.0120.00616.90
7.3.180.0090.00916.77
7.3.170.0070.01716.98
7.3.160.0040.01716.58
7.2.330.0090.01216.88
7.2.320.0070.01317.17
7.2.310.0110.01016.77
7.2.300.0090.01117.12
7.2.290.0160.01617.13
7.2.60.0130.00317.09
7.2.00.0030.01019.39
7.1.200.0040.00816.24
7.1.100.0060.00618.28
7.1.70.0050.00517.57
7.1.60.0630.01733.71
7.1.50.0830.02333.07
7.1.40.0730.01333.03
7.1.30.0700.02033.25
7.1.20.0800.01033.10
7.1.10.1230.01015.02
7.1.00.0570.01315.10
7.0.200.0630.01715.16
7.0.190.0630.01315.17
7.0.180.0630.01314.68
7.0.170.0670.00314.54
7.0.160.0530.01314.93
7.0.150.0530.01314.75
7.0.140.0500.01714.74
7.0.130.0530.01314.93
7.0.120.0630.00714.83
7.0.110.0470.01314.84
7.0.100.0670.01014.65
7.0.90.0430.02014.92
7.0.80.0070.01314.89
7.0.70.0700.01314.80
7.0.60.0730.00714.50
7.0.50.0530.00714.86
7.0.40.0530.01314.83
7.0.30.0000.01314.90
7.0.20.0100.00714.76
7.0.10.0100.01314.98
7.0.00.0030.01314.61

preferences:
63.81 ms | 400 KiB | 5 Q